"""Auto-delete bot responses after configurable delay."""
from __future__ import annotations

import asyncio
import logging

from telegram import Update
from telegram.error import BadRequest, Forbidden
from telegram.ext import ContextTypes

from bot import db
from bot.decorators import admin_only
from bot.persian_router import register_mixed

logger = logging.getLogger(__name__)


async def _delete_after(context: ContextTypes.DEFAULT_TYPE, chat_id: int, msg_id: int, delay: int) -> None:
    """Delete a message after `delay` seconds."""
    await asyncio.sleep(delay)
    try:
        await context.bot.delete_message(chat_id, msg_id)
    except (BadRequest, Forbidden):
        pass


async def schedule_auto_delete(context: ContextTypes.DEFAULT_TYPE, chat_id: int, msg_id: int) -> None:
    """Schedule a message for auto-deletion if the feature is enabled."""
    delay = await db.get_setting(chat_id, "autodelete_secs", 0)
    if delay and delay > 0:
        asyncio.ensure_future(_delete_after(context, chat_id, msg_id, delay))


@admin_only
async def autodelete_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    """Set auto-delete timer: /autodelete 30 or /autodelete 0 to disable."""
    chat = update.effective_chat
    args = (update.message.text or "").split()
    if len(args) < 2:
        cur = await db.get_setting(chat.id, "autodelete_secs", 0)
        status = f"🟢 {cur} ثانیه" if cur else "🔴 غیرفعال"
        await update.message.reply_text(
            f"🧹 <b>حذف خودکار پیام‌ها</b>\n\n"
            f"وضعیت: {status}\n\n"
            f"استفاده: <code>autodelete 30</code> (ثانیه)\n"
            f"برای غیرفعال کردن: <code>autodelete 0</code>",
            parse_mode="HTML",
        )
        return
    try:
        secs = int(args[1])
        if secs < 0:
            raise ValueError
    except ValueError:
        await update.message.reply_text("❌ لطفاً یک عدد معتبر وارد کن (ثانیه)", parse_mode="HTML")
        return
    await db.set_setting(chat.id, "autodelete_secs", secs)
    if secs == 0:
        await update.message.reply_text("✅ حذف خودکار غیرفعال شد")
    else:
        await update.message.reply_text(f"✅ پیام‌های ربات بعد از {secs} ثانیه حذف می‌شن")


def register(app):
    register_mixed(
        app,
        {"autodelete": autodelete_cmd},
        {"حذف خودکار": autodelete_cmd, "پاکسازی خودکار": autodelete_cmd, "خودپاکسازی": autodelete_cmd},
    )
