from html import escape


def _value(value: str | None) -> str:
    return escape(str(value or "-"))


def commander(name: str) -> str:
    # Deliberately plain text: reports must not expose clickable user ids.
    return escape(name or "بدون نام")


def campaign(kind: str, country: str, origin: str, destination: str, target_country: str,
             eta: str, commander_name: str, stats: str, vanguard: str) -> str:
    country, origin, destination, target_country = map(escape, (country, origin, destination, target_country))
    eta, stats, vanguard = map(escape, (eta, stats, vanguard))
    commander_name = commander(commander_name)
    if kind == "infantry":
        title = "🔻لشکرکشی پیاده"
        line = f"🔰|پیاده نظام {country} از {origin} به {destination} در قلمرو {target_country} حرکت کردند."
    elif kind == "cavalry":
        title = "🔻لشکرکشی سواره"
        line = f"🔰|سواره نظام {country} از {origin} به {destination} در قلمرو {target_country} حرکت کردند."
    else:
        title = "🔻 لشکرکشی دریایی"
        line = f"🔰|ناوگان دریایی {country} از {origin} به {destination} در قلمرو {target_country} حرکت کردند."
    return (f"{title}\n\n{line}\n\n"
            f"⏰ زمان رسیدن: {eta}\n"
            f"🥷 فرمانده: {commander_name}")


def campaign_admin_report(kind: str, country: str, origin: str, destination: str,
                          target_country: str, eta: str, stats: str, vanguard: str) -> str:
    values = map(escape, (country, origin, destination, target_country, eta, stats, vanguard))
    country, origin, destination, target_country, eta, stats, vanguard = values
    kind_label = {"infantry": "پیاده", "cavalry": "سواره", "naval_campaign": "دریایی"}.get(kind, kind)
    return (f"📋 <b>گزارش کامل لشکرکشی {escape(kind_label)}</b>\n\n"
            f"🏳 کشور: {country}\n"
            f"📍 مبدا: {origin}\n"
            f"🎯 مقصد: {destination}\n"
            f"🗺 قلمرو مقصد: {target_country}\n"
            f"📊 آمار لشکرکشی:\n{stats}\n\n"
            f"🛡 پیش‌قراول:\n{vanguard}\n\n"
            f"⏰ زمان رسیدن: {eta}")


def attack(kind: str, attacker: str, target: str, target_country: str,
           commander_name: str, stats: str) -> str:
    attacker, target, target_country = map(escape, (attacker, target, target_country))
    commander_name = commander(commander_name)
    stats = escape(stats)
    if kind == "ground_attack":
        title = "🔻 دستور حمله زمینی"
        line = f"🔰|لشکریان {attacker} به {target} در قلمرو {target_country} حمله کردند."
    elif kind == "artillery_attack":
        title = "🔻 دستور حمله توپخانه‌ای"
        line = f"🔰|توپخانه {attacker} شهر {target} را در قلمرو {target_country} زیر کوبش توپخانه‌ای قرار دادند."
    elif kind == "naval_attack":
        title = "🔻 دستور حمله دریایی"
        line = f"🔰|ناوگان دریایی {attacker} به {target} در قلمرو {target_country} حمله کردند."
    elif kind == "ground_siege":
        title = "🔻دستور محاصره زمینی"
        line = f"🔰|لشکریان {attacker} به سوی {target} حرکت کردند و شهر را به محاصره درآوردند."
    else:
        title = "🔻 دستور محاصره دریایی"
        line = f"🔰|ناوگان دریایی {attacker} بندر شهر {target} را به محاصره درآوردند."
    label = "فرمانده محاصره" if "siege" in kind else "فرمانده مهاجمین"
    return f"{title}\n\n{line}\n\n🥷 {label}: {commander_name}"


def attack_admin_report(kind: str, attacker: str, target: str,
                        target_country: str, stats: str) -> str:
    attacker, target, target_country, stats = map(escape, (attacker, target, target_country, stats))
    labels = {
        "ground_attack": "حمله زمینی",
        "artillery_attack": "حمله توپخانه‌ای",
        "naval_attack": "حمله دریایی",
        "ground_siege": "محاصره زمینی",
        "naval_siege": "محاصره دریایی",
    }
    return (f"📋 <b>گزارش کامل {escape(labels.get(kind, kind))}</b>\n\n"
            f"🏳 کشور عامل: {attacker}\n"
            f"🎯 مقصد عملیات: {target}\n"
            f"🗺 قلمرو هدف: {target_country}\n"
            f"📊 آمار نیروها:\n{stats}")


def back(country: str, eta: str) -> str:
    return f"🔰<b>|فرمانده {escape(country)} به لشکریان خود دستور داد به مبدا حرکت بازگردند !</b>\n\n⏰زمان رسیدن : {escape(eta)}"


def back_admin_report(country: str, origin: str, destination: str, eta: str) -> str:
    country, origin, destination, eta = map(escape, (country, origin, destination, eta))
    return (f"📋 <b>گزارش دستور بازگشت</b>\n\n"
            f"🏳 کشور: {country}\n📍 مبدا اولیه: {origin}\n"
            f"🎯 مقصد قبلی: {destination}\n⏰ زمان بازگشت: {eta}")


def ambush(target_country: str, country: str, commander_name: str) -> str:
    return (f"🔻 دستور کمین\n\n🔰|نیرو های ارتش {escape(target_country)} به کمین نیرو های "
            f"{escape(country)} برخورد کردند.\n\n🥷فرمانده کمین : {commander(commander_name)}")


def ambush_admin_report(country: str, campaign_country: str, origin: str,
                        destination: str, stats: str) -> str:
    country, campaign_country, origin, destination, stats = map(
        escape, (country, campaign_country, origin, destination, stats)
    )
    return (f"📋 <b>گزارش کامل کمین</b>\n\n"
            f"🏳 کشور کمین‌کننده: {country}\n"
            f"📊 آمار نیروهای کمین‌کننده:\n{stats}\n"
            f"🚩 کشور لشکر هدف: {campaign_country}\n"
            f"📍 مسیر هدف: {origin} ← {destination}")


def tweet(country: str, text: str, commander_name: str) -> str:
    return (f"🕊 توییت کشور {escape(country)} :\n\n⭕️ {escape(text)}\n\n"
            f"✍️ نویسنده : {commander(commander_name)}")


def tweet_admin_report(country: str, text: str, media_type: str) -> str:
    return (f"📋 <b>گزارش توییت</b>\n\n🏳 کشور: {escape(country)}\n"
            f"📎 نوع محتوا: {escape(media_type)}\n📝 متن:\n{escape(text)}")


def campaign_confirmation(kind: str, country: str, origin: str, destination: str,
                           target_country: str, eta: str, commander_name: str,
                           stats: str, vanguard: str) -> str:
    kind_label = {"infantry": "پیاده", "cavalry": "سواره", "naval_campaign": "دریایی"}.get(kind, kind)
    return (
        f"🔎 <b>تأیید نهایی لشکرکشی {escape(kind_label)}</b>\n\n"
        f"🏳 کشور: {_value(country)}\n"
        f"📍 مبدا: {_value(origin)}\n"
        f"🎯 مقصد: {_value(destination)}\n"
        f"🗺 قلمرو مقصد: {_value(target_country)}\n"
        f"⏰ زمان رسیدن: {_value(eta)}\n"
        f"🥷 فرمانده: {_value(commander_name)}\n"
        f"📊 آمار:\n{_value(stats)}\n\n"
        f"🛡 پیش‌قراول:\n{_value(vanguard)}\n\n"
        "آیا از صحت همهٔ اطلاعات مطمئن هستید؟"
    )


def attack_confirmation(kind: str, country: str, target: str, target_country: str,
                        commander_name: str, stats: str) -> str:
    labels = {
        "ground_attack": "حمله زمینی",
        "artillery_attack": "حمله توپخانه‌ای",
        "naval_attack": "حمله دریایی",
        "ground_siege": "محاصره زمینی",
        "naval_siege": "محاصره دریایی",
    }
    return (
        f"🔎 <b>تأیید نهایی {escape(labels.get(kind, kind))}</b>\n\n"
        f"🏳 کشور عامل: {_value(country)}\n"
        f"🏙 شهر/مقصد عملیات: {_value(target)}\n"
        f"🗺 قلمرو هدف: {_value(target_country)}\n"
        f"🥷 فرمانده: {_value(commander_name)}\n"
        f"📊 آمار نیروها:\n{_value(stats)}\n\n"
        "آیا از صحت همهٔ اطلاعات مطمئن هستید؟"
    )


def tweet_confirmation(country: str, text: str, commander_name: str,
                       media_type: str) -> str:
    return (
        "🔎 <b>تأیید نهایی توییت</b>\n\n"
        f"🏳 کشور: {_value(country)}\n"
        f"📎 نوع محتوا: {_value(media_type)}\n"
        f"✍️ نویسنده: {_value(commander_name)}\n"
        f"📝 متن:\n{_value(text)}\n\n"
        "آیا از صحت همهٔ اطلاعات مطمئن هستید؟"
    )


def back_confirmation(country: str, origin: str, destination: str, eta: str,
                      campaign_id: int) -> str:
    return (
        "🔎 <b>تأیید نهایی دستور بک</b>\n\n"
        f"🆔 شماره لشکرکشی: <code>#{campaign_id}</code>\n"
        f"🏳 کشور: {_value(country)}\n"
        f"📍 مبدا: {_value(origin)}\n"
        f"🎯 مقصد فعلی: {_value(destination)}\n"
        f"⏰ زمان رسیدن به مبدا: {_value(eta)}\n\n"
        "آیا از صحت همهٔ اطلاعات مطمئن هستید؟"
    )


def ambush_confirmation(country: str, campaign_country: str, origin: str,
                        destination: str, stats: str) -> str:
    return (
        "🔎 <b>تأیید نهایی کمین</b>\n\n"
        f"🏳 کشور کمین‌کننده: {_value(country)}\n"
        f"🚩 کشور لشکر هدف: {_value(campaign_country)}\n"
        f"📍 مسیر هدف: {_value(origin)} ← {_value(destination)}\n\n"
        f"📊 آمار نیروهای کمین‌کننده:\n{_value(stats)}\n\n"
        "آیا از صحت همهٔ اطلاعات مطمئن هستید؟"
    )
