"""Word filters — auto-delete messages with certain words/phrases."""
from __future__ import annotations

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

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


@admin_only
async def filter_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    chat = update.effective_chat
    args = (update.message.text or "").split(maxsplit=1)
    if len(args) < 2:
        await update.message.reply_text(
            "❌ استفاده: <code>filter کلمه</code> (یا روی پیام ریپلای کنید)", parse_mode=ParseMode.HTML
        )
        return
    word = args[1].lower().strip()
    await db.add_filter(chat.id, word)
    await update.message.reply_text(
        f"✅ کلمه <code>{word}</code> فیلتر شد. پیام‌های حاوی آن حذف خواهند شد.",
        parse_mode=ParseMode.HTML,
    )


@admin_only
async def remfilter_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    chat = update.effective_chat
    args = (update.message.text or "").split(maxsplit=1)
    if len(args) < 2:
        await update.message.reply_text(
            "❌ استفاده: <code>remfilter کلمه</code>", parse_mode=ParseMode.HTML
        )
        return
    word = args[1].lower().strip()
    await db.remove_filter(chat.id, word)
    await update.message.reply_text(
        f"✅ فیلتر <code>{word}</code> حذف شد.", parse_mode=ParseMode.HTML
    )


@admin_only
async def filterlist_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    chat = update.effective_chat
    rows = await db.get_all_filters(chat.id)
    if not rows:
        await update.message.reply_text("📋 لیست فیلترها خالی است.")
        return
    text = f"📋 <b>لیست فیلترها ({len(rows)}):</b>\n\n"
    for i, r in enumerate(rows[:50], 1):
        text += f"{i}. <code>{r['keyword']}</code>\n"
    await update.message.reply_text(text, parse_mode=ParseMode.HTML)


@admin_only
async def cleanfilterlist_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    chat = update.effective_chat
    rows = await db.get_all_filters(chat.id)
    await db.remove_all_filters(chat.id)
    await update.message.reply_text(f"✅ {len(rows)} فیلتر پاک شد.")


def register(app) -> None:
    register_mixed(
        app,
        {
            "filter": filter_cmd,
            "remfilter": remfilter_cmd,
            "filterlist": filterlist_cmd,
            "cleanfilterlist": cleanfilterlist_cmd,
        },
        {
            "فیلتر": filter_cmd,
            "فیلتر کن": filter_cmd,
            "افزودن فیلتر": filter_cmd,
            "کلمه فیلتر": filter_cmd,
            "پالایه": filter_cmd,
            "اضافه کن فیلتر": filter_cmd,
            "حذف فیلتر": remfilter_cmd,
            "پاک کردن فیلتر": remfilter_cmd,
            "حذف کن فیلتر": remfilter_cmd,
            "لیست فیلتر": filterlist_cmd,
            "فیلترها": filterlist_cmd,
            "همه فیلتر": filterlist_cmd,
            "پاکسازی لیست فیلتر": cleanfilterlist_cmd,
            "پاک کردن همه فیلتر": cleanfilterlist_cmd,
        },
    )
