"""Blacklist (bad words) handler — anti-bad-words."""
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.decorators import admin_only
from bot.persian_router import register_mixed


@admin_only
async def addblacklist_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("مثلاً: <code>addblacklist کلمه</code>", parse_mode=ParseMode.HTML)
        return
    word = args[1].lower().strip()
    await db.add_blacklist_word(update.effective_chat.id, word)
    await update.message.reply_text(f"کلمه <code>{word}</code> اضافه شد.", parse_mode=ParseMode.HTML)


@admin_only
async def rmblacklist_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("مثلاً: <code>rmblacklist کلمه</code>", parse_mode=ParseMode.HTML)
        return
    word = args[1].lower().strip()
    await db.remove_blacklist_word(update.effective_chat.id, word)
    await update.message.reply_text(f"کلمه <code>{word}</code> حذف شد.", parse_mode=ParseMode.HTML)


@admin_only
async def blacklists_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    words = await db.get_blacklist_words(update.effective_chat.id)
    if not words:
        await update.message.reply_text("لیست سیاه خالیه")
        return
    text = f"<b>لیست سیاه ({len(words)} کلمه):</b>\n\n"
    for i, w in enumerate(words[:80], 1):
        text += f"{i}. <code>{w}</code>\n"
    await update.message.reply_text(text, parse_mode=ParseMode.HTML)


@admin_only
async def clearblacklist_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    words = await db.get_blacklist_words(update.effective_chat.id)
    await db.clear_blacklist(update.effective_chat.id)
    await update.message.reply_text(f"{len(words)} کلمه پاک شد.")


def register(app) -> None:
    register_mixed(
        app,
        {
            "addblacklist": addblacklist_cmd,
            "rmblacklist": rmblacklist_cmd,
            "blacklists": blacklists_cmd,
            "clearblacklist": clearblacklist_cmd,
        },
        {
            "افزودن لیست سیاه": addblacklist_cmd,
            "کلمه ممنوع": addblacklist_cmd,
            "افزودن کلمه ممنوع": addblacklist_cmd,
            "کلمه ممنوع اضافه کن": addblacklist_cmd,
            "کلمه جدید": addblacklist_cmd,
            "اضافه کن به لیست سیاه": addblacklist_cmd,
            "لیست سیاه": blacklists_cmd,
            "کلمات ممنوع": blacklists_cmd,
            "لیست کلمات ممنوع": blacklists_cmd,
            "نمایش لیست سیاه": blacklists_cmd,
            "کلمات": blacklists_cmd,
            "حذف لیست سیاه": rmblacklist_cmd,
            "حذف کلمه ممنوع": rmblacklist_cmd,
            "پاک کردن کلمه ممنوع": rmblacklist_cmd,
            "حذف کلمه": rmblacklist_cmd,
            "پاکسازی لیست سیاه": clearblacklist_cmd,
            "پاک کردن لیست سیاه": clearblacklist_cmd,
            "حذف همه لیست سیاه": clearblacklist_cmd,
            "خالی کردن لیست سیاه": clearblacklist_cmd,
            "پاک کردن همه": clearblacklist_cmd,
        },
    )
