"""Welcome & Goodbye handler."""
from __future__ import annotations

from telegram import Update
from telegram.constants import ParseMode
from telegram.ext import CommandHandler, ContextTypes

from bot import db
from bot.config import DEFAULT_GOODBYE, DEFAULT_WELCOME
from bot.decorators import admin_only
from bot.constants import MSG, PLACEHOLDERS
from bot.persian_router import register_mixed


@admin_only
async def setwelcome_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    args = (update.message.text or "").split(maxsplit=1)
    if len(args) < 2:
        await update.message.reply_text(
            "بعد از دستور، متن خوش‌آمد رو بنویس\n\n"
            "<b>متغیرهایی که می‌تونی استفاده کنی:</b>\n"
            + "\n".join(f"<code>{k}</code> → {v}" for k, v in PLACEHOLDERS.items()),
            parse_mode=ParseMode.HTML,
        )
        return
    text = args[1]
    await db.set_setting(update.effective_chat.id, "welcome_text", text)
    await db.set_setting(update.effective_chat.id, "welcome_enabled", True)
    await update.message.reply_text(
        f"خوش‌آمد جدید تنظیم شد:\n\n{text}", parse_mode=ParseMode.HTML
    )


@admin_only
async def resetwelcome_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    await db.del_setting(update.effective_chat.id, "welcome_text")
    await update.message.reply_text(
        f"خوش‌آمد برگشت به حالت اولیه:\n\n{DEFAULT_WELCOME}",
        parse_mode=ParseMode.HTML,
    )


@admin_only
async def welcomeon_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    await db.set_setting(update.effective_chat.id, "welcome_enabled", True)
    await update.message.reply_text("خوش‌آمد فعال شد")


@admin_only
async def welcomeoff_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    await db.set_setting(update.effective_chat.id, "welcome_enabled", False)
    await update.message.reply_text("خوش‌آمد غیرفعال شد")


@admin_only
async def welcome_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    settings = await db.get_all_settings(update.effective_chat.id)
    enabled = settings.get("welcome_enabled", True)
    text = settings.get("welcome_text", DEFAULT_WELCOME)
    state = "فعال" if enabled else "غیرفعال"
    await update.message.reply_text(
        f"خوش‌آمد ({state}):\n\n{text}", parse_mode=ParseMode.HTML
    )


@admin_only
async def setgoodbye_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    args = (update.message.text or "").split(maxsplit=1)
    if len(args) < 2:
        await update.message.reply_text("بعد از دستور، متن خداحافظی رو بنویس", parse_mode=ParseMode.HTML)
        return
    await db.set_setting(update.effective_chat.id, "goodbye_text", args[1])
    await db.set_setting(update.effective_chat.id, "goodbye_enabled", True)
    await update.message.reply_text(
        f"خداحافظی جدید تنظیم شد:\n\n{args[1]}", parse_mode=ParseMode.HTML
    )


@admin_only
async def resetgoodbye_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    await db.del_setting(update.effective_chat.id, "goodbye_text")
    await update.message.reply_text(
        f"خداحافظی برگشت به حالت اولیه:\n\n{DEFAULT_GOODBYE}",
        parse_mode=ParseMode.HTML,
    )


@admin_only
async def goodbyeon_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    await db.set_setting(update.effective_chat.id, "goodbye_enabled", True)
    await update.message.reply_text("خداحافظی فعال شد")


@admin_only
async def goodbyeooff_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    await db.set_setting(update.effective_chat.id, "goodbye_enabled", False)
    await update.message.reply_text("خداحافظی غیرفعال شد")


@admin_only
async def goodbye_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    settings = await db.get_all_settings(update.effective_chat.id)
    enabled = settings.get("goodbye_enabled", False)
    text = settings.get("goodbye_text", DEFAULT_GOODBYE)
    state = "فعال" if enabled else "غیرفعال"
    await update.message.reply_text(
        f"خداحافظی ({state}):\n\n{text}", parse_mode=ParseMode.HTML
    )


@admin_only
async def cleanwelcome_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    args = (update.message.text or "").split()
    if len(args) > 1 and args[1] in ("on", "روشن"):
        await db.set_setting(update.effective_chat.id, "clean_welcome", True)
        await update.message.reply_text("حذف خودکار خوش‌آمد فعال شد")
    else:
        await db.set_setting(update.effective_chat.id, "clean_welcome", False)
        await update.message.reply_text("حذف خودکار خوش‌آمد غیرفعال شد")


@admin_only
async def setwelcometime_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    args = (update.message.text or "").split()
    if len(args) < 2 or not args[1].isdigit():
        await update.message.reply_text("مثلا بنویس <code>setwelcometime 300</code> (برحسب ثانیه)", parse_mode=ParseMode.HTML)
        return
    await db.set_setting(update.effective_chat.id, "welcome_delete_time", int(args[1]))
    await db.set_setting(update.effective_chat.id, "clean_welcome", True)
    await update.message.reply_text(f"زمان حذف خوش‌آمد شد {args[1]} ثانیه")


@admin_only
async def setwelcomesticker_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    """Set a welcome sticker by replying to a sticker."""
    reply = update.message.reply_to_message
    if not reply or not reply.sticker:
        await update.message.reply_text("روی یه استیکر ریپلای کن تا بذارمش برای خوش‌آمد")
        return
    await db.set_setting(update.effective_chat.id, "welcome_sticker_id", reply.sticker.file_id)
    await update.message.reply_text("استیکر خوش‌آمد تنظیم شد")


@admin_only
async def removewelcomesticker_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    """Remove the welcome sticker."""
    await db.del_setting(update.effective_chat.id, "welcome_sticker_id")
    await update.message.reply_text("استیکر خوش‌آمد حذف شد")


@admin_only
async def setwelcomephoto_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    """Set a welcome photo by replying to a photo."""
    reply = update.message.reply_to_message
    if not reply or not reply.photo:
        await update.message.reply_text("روی یه عکس ریپلای کن تا بذارمش برای خوش‌آمد")
        return
    photo = reply.photo[-1]
    await db.set_setting(update.effective_chat.id, "welcome_photo_id", photo.file_id)
    await update.message.reply_text("عکس خوش‌آمد تنظیم شد")


@admin_only
async def removewelcomephoto_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    """Remove the welcome photo."""
    await db.del_setting(update.effective_chat.id, "welcome_photo_id")
    await update.message.reply_text("عکس خوش‌آمد حذف شد")


@admin_only
async def setwelcomevideo_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    """Set a welcome video by replying to a video."""
    reply = update.message.reply_to_message
    if not reply or not reply.video:
        await update.message.reply_text("روی یه ویدیو ریپلای کن تا بذارمش برای خوش‌آمد")
        return
    await db.set_setting(update.effective_chat.id, "welcome_video_id", reply.video.file_id)
    await update.message.reply_text("ویدیو خوش‌آمد تنظیم شد")


@admin_only
async def removewelcomevideo_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    """Remove the welcome video."""
    await db.del_setting(update.effective_chat.id, "welcome_video_id")
    await update.message.reply_text("ویدیو خوش‌آمد حذف شد")


@admin_only
async def setwelcomeanimation_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    """Set a welcome GIF by replying to an animation."""
    reply = update.message.reply_to_message
    if not reply or not reply.animation:
        await update.message.reply_text("روی یه گیف ریپلای کن تا بذارمش برای خوش‌آمد")
        return
    await db.set_setting(update.effective_chat.id, "welcome_animation_id", reply.animation.file_id)
    await update.message.reply_text("گیف خوش‌آمد تنظیم شد")


@admin_only
async def removewelcomeanimation_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    """Remove the welcome animation."""
    await db.del_setting(update.effective_chat.id, "welcome_animation_id")
    await update.message.reply_text("گیف خوش‌آمد حذف شد")


def register(app) -> None:
    register_mixed(
        app,
        {
            "setwelcome": setwelcome_cmd,
            "resetwelcome": resetwelcome_cmd,
            "welcomeon": welcomeon_cmd,
            "welcomeoff": welcomeoff_cmd,
            "welcome": welcome_cmd,
            "setgoodbye": setgoodbye_cmd,
            "resetgoodbye": resetgoodbye_cmd,
            "goodbyeoff": goodbyeooff_cmd,
            "goodbye": goodbye_cmd,
            "cleanwelcome": cleanwelcome_cmd,
            "setwelcometime": setwelcometime_cmd,
            "setwelcomesticker": setwelcomesticker_cmd,
            "removewelcomesticker": removewelcomesticker_cmd,
            "setwelcomephoto": setwelcomephoto_cmd,
            "removewelcomephoto": removewelcomephoto_cmd,
            "setwelcomevideo": setwelcomevideo_cmd,
            "removewelcomevideo": removewelcomevideo_cmd,
            "setwelcomeanimation": setwelcomeanimation_cmd,
            "removewelcomeanimation": removewelcomeanimation_cmd,
        },
        {
            "تنظیم خوشامد": setwelcome_cmd,
            "پیام خوشامد": setwelcome_cmd,
            "خوش آمد": setwelcome_cmd,
            "خوش آمد گویی": setwelcome_cmd,
            "تنظیم خوش‌آمد": setwelcome_cmd,
            "خوشامد گروه": setwelcome_cmd,
            "خوش‌آمد جدید": setwelcome_cmd,
            "عوض کن خوشامد رو": setwelcome_cmd,
            "حذف خوشامد": resetwelcome_cmd,
            "پاک کردن خوشامد": resetwelcome_cmd,
            "خوشامد پیشفرض": resetwelcome_cmd,
            "برگردون خوشامد": resetwelcome_cmd,
            "خوشامد روشن": welcomeon_cmd,
            "فعال کردن خوشامد": welcomeon_cmd,
            "خوشامد خاموش": welcomeoff_cmd,
            "غیرفعال کردن خوشامد": welcomeoff_cmd,
            "خوشامد": welcome_cmd,
            "نمایش خوشامد": welcome_cmd,
            "متن خوشامد": welcome_cmd,
            "تنظیم خداحافظی": setgoodbye_cmd,
            "خداحافظی": goodbye_cmd,
            "پیام خداحافظی": setgoodbye_cmd,
            "خداحافظی جدید": setgoodbye_cmd,
            "حذف خداحافظی": resetgoodbye_cmd,
            "پاک کردن خداحافظی": resetgoodbye_cmd,
            "برگردون خداحافظی": resetgoodbye_cmd,
            "خداحافظی روشن": goodbyeon_cmd,
            "فعال کردن خداحافظی": goodbyeon_cmd,
            "خداحافظی خاموش": goodbyeooff_cmd,
            "غیرفعال کردن خداحافظی": goodbyeooff_cmd,
            "تنظیم زمان خوشامد": setwelcometime_cmd,
            "زمان خوشامد": setwelcometime_cmd,
            "مدت خوشامد": setwelcometime_cmd,
            "تمیز کردن خوشامد": cleanwelcome_cmd,
            "حذف خودکار خوشامد": cleanwelcome_cmd,
            "پاکسازی خوشامد": cleanwelcome_cmd,
            "استیکر خوشامد": setwelcomesticker_cmd,
            "تنظیم استیکر خوشامد": setwelcomesticker_cmd,
            "عوض کن استیکر خوشامد": setwelcomesticker_cmd,
            "حذف استیکر خوشامد": removewelcomesticker_cmd,
            "عکس خوشامد": setwelcomephoto_cmd,
            "تنظیم عکس خوشامد": setwelcomephoto_cmd,
            "حذف عکس خوشامد": removewelcomephoto_cmd,
            "ویدیو خوشامد": setwelcomevideo_cmd,
            "تنظیم ویدیو خوشامد": setwelcomevideo_cmd,
            "حذف ویدیو خوشامد": removewelcomevideo_cmd,
            "گیف خوشامد": setwelcomeanimation_cmd,
            "تنظیم گیف خوشامد": setwelcomeanimation_cmd,
            "حذف گیف خوشامد": removewelcomeanimation_cmd,
        },
    )
