"""
مدیریت امضاها: بارگذاری از فایل + انتخاب مرتبط‌ترین امضا با AI.
"""
from __future__ import annotations
import asyncio
import os
import config


def load_signatures() -> list[str]:
    """
    هر خط فایل signatures.txt یک امضاست.
    کاراکتر | داخل هر خط به شکست خط (\\n) تبدیل می‌شود.
    خطوط خالی و خطوطی که با # شروع می‌شوند نادیده گرفته می‌شوند.
    """
    path = config.SIGNATURES_FILE
    if not os.path.exists(path):
        return []
    sigs = []
    with open(path, "r", encoding="utf-8") as f:
        for line in f:
            raw = line.rstrip("\n")
            if not raw.strip() or raw.lstrip().startswith("#"):
                continue
            sigs.append(raw.replace("|", "\n").strip())
    return sigs


def default_signature(sigs: list[str]) -> str:
    """امضای پیش‌فرض بر اساس DEFAULT_SIGNATURE_INDEX (۱-based)."""
    if not sigs:
        return ""
    idx = config.DEFAULT_SIGNATURE_INDEX - 1
    if 0 <= idx < len(sigs):
        return sigs[idx]
    return sigs[0]


async def pick_signature(post_text: str, sigs: list[str]) -> str:
    """
    مرتبط‌ترین امضا را با کمک AI انتخاب می‌کند.
    اگر AI غیرفعال/ناموفق بود، امضای پیش‌فرض را برمی‌گرداند.
    """
    if not sigs:
        return ""
    if len(sigs) == 1:
        return sigs[0]
    if not config.ENABLE_AI_SIGNATURE:
        return default_signature(sigs)

    # فهرست شماره‌دار امضاها برای انتخاب
    numbered = "\n".join(
        f"{i+1}. {s.replace(chr(10), ' / ')}" for i, s in enumerate(sigs)
    )
    prompt = (
        "یک پست تلگرامی و چند امضای آماده داریم. "
        "بر اساس موضوع و محتوای پست، مرتبط‌ترین امضا را انتخاب کن.\n"
        "فقط شماره‌ی امضای منتخب را برگردان (یک عدد، بدون توضیح).\n\n"
        f"پست:\n---\n{post_text}\n---\n\n"
        f"امضاها:\n{numbered}\n\n"
        "شماره‌ی مرتبط‌ترین امضا:"
    )
    try:
        import anthropic
        client = anthropic.Anthropic(api_key=config.ANTHROPIC_API_KEY)
        msg = await asyncio.to_thread(
            client.messages.create,
            model=config.AI_MODEL,
            max_tokens=10,
            messages=[{"role": "user", "content": prompt}],
        )
        answer = msg.content[0].text.strip()
        # اولین عددی که در پاسخ آمده را بردار
        import re
        m = re.search(r"\d+", answer)
        if m:
            idx = int(m.group()) - 1
            if 0 <= idx < len(sigs):
                return sigs[idx]
    except Exception as e:
        print(f"[هشدار] انتخاب امضا با AI ناموفق بود: {e}")
    return default_signature(sigs)