"""
Обработчик команды /start и /help для администраторов.
Показывает список доступных команд для управления банвордами.
"""
from aiogram import Router, F
from aiogram.filters import Command
from aiogram.types import Message, CallbackQuery
from aiogram.utils.keyboard import InlineKeyboardBuilder

from bot.filters.admin import IsAdmin
from configs import settings, COMMANDS
from middleware.loggers import logger
from bot.utils.decorators import log_action

__all__ = ("router",)
CMD: str = "start"
router: Router = Router(name="start_cmd_router")

def kb(text: str = "Создатель⬆️", url: str = "https://t.me/verdise"):
    ikb = InlineKeyboardBuilder()
    ikb.button(text=text, url=url)
    return ikb.as_markup()


@router.callback_query(F.data.casefold() == CMD)
@router.message(Command(*COMMANDS[CMD], prefix=settings.PREFIX, ignore_case=True), IsAdmin())
@log_action(action_name="START_COMMAND", log_args=True)
async def start_cmd(update: Message | CallbackQuery) -> None:
    """
    Обработчик команды /start и /help.
    Показывает справку по командам бота для администраторов.

    Доступно только администраторам (суперадмин или доп. админ из БД).

    Args:
        update: Message или CallbackQuery
    """
    print(123)
    # Определяем тип update и извлекаем данные
    if isinstance(update, CallbackQuery):
        message = update.message
        user_id = update.from_user.id
        is_callback = True
    else:
        message = update
        user_id = update.from_user.id
        is_callback = False

    # Проверяем, является ли пользователь суперадмином
    is_super_admin = user_id in settings.OWNER_ID

    # Формируем текст помощи
    help_text = (
        "🤖 <b>PrimoGuard - Бот-модератор</b>\n\n"
        "Автоматическое удаление сообщений с запрещёнными словами.\n"
        "Поддержка подстрок, лемм, временных блокировок и режимов модерации.\n\n"
    )

    # === Команды просмотра ===
    help_text += (
        "📋 <b>Просмотр:</b>\n"
        "/list — список всех правил и слов\n"
        "/stats — статистика по удалениям\n"
        "/id — получение айди пользователя\n"
        "/chatid — получение айди чата\n\n"
    )

    # === Постоянные банворды ===
    help_text += (
        "➕ <b>Добавить банворд (постоянно):</b>\n"
        "/addword <code>слово</code> — подстрока (простой поиск)\n"
        "/addlemma <code>слово</code> — лемма (все формы слова)\n"
        "/addpart <code>комбинация</code> — часть (поиск без пробелов)\n\n"
    )

    # === Временные банворды ===
    help_text += (
        "⏱ <b>Добавить банворд (временно):</b>\n"
        "/addtempword <code>слово минуты</code> — временная подстрока\n"
        "/addtemplemma <code>слово минуты</code> — временная лемма\n"
        "<i>Пример: /addtempword спам 60</i>\n\n"
    )

    # === Исключения (whitelist) ===
    help_text += (
        "✅ <b>Исключения (whitelist):</b>\n"
        "/addexcept <code>текст</code> — добавить исключение\n"
        "/remexcept <code>текст</code> — удалить исключение\n"
        "<i>Исключения не проверяются фильтром</i>\n\n"
    )

    # === Режимы модерации ===
    help_text += (
        "🔇 <b>Режим тишины:</b>\n"
        "/silence <code>минуты</code> — удалять ВСЕ сообщения\n"
        "/unsilence — отключить режим тишины\n\n"
    )

    help_text += (
        "⚔️ <b>Режим антиконфликта:</b>\n"
        "/addconflictword <code>слово</code> — добавить конфликтное слово\n"
        "/addconflictlemma <code>слово</code> — добавить конфликтную лемму\n"
        "/stopconflict <code>минуты</code> — активировать режим\n"
        "/unstopconflict — отключить режим\n\n"
    )

    # === Удаление ===
    help_text += (
        "➖ <b>Удалить:</b>\n"
        "/remword <code>слово</code> — удалить подстроку\n"
        "/remlemma <code>слово</code> — удалить лемму\n"
        "/rempart <code>комбинация</code> — удалить часть\n"
        "/remtempword <code>слово</code> — удалить временную подстроку\n"
        "/remtemplemma <code>слово</code> — удалить временную лемму\n"
        "/remconflictword <code>слово</code> — удалить конфликтное слово\n"
        "/remconflictlemma <code>слово</code> — удалить конфликтную лемму\n\n"
    )

    # === Управление админами (только для суперадминов) ===
    if is_super_admin:
        help_text += (
            "👑 <b>Управление админами (только для владельцев):</b>\n"
            "/addadmin <code>ID</code> — добавить администратора\n"
            "/remadmin <code>ID</code> — удалить администратора\n"
            "/listadmins — список всех админов\n\n"
        )

    # === Типы проверок ===
    help_text += (
        "ℹ️ <b>Типы проверок:</b>\n"
        "• <b>Подстрока</b> — простой поиск в тексте\n"
        "• <b>Лемма</b> — все формы слова (купить→куплю, купил, купишь...)\n"
        "• <b>Часть</b> — поиск без пробелов (обходит \"к у п и т ь\")\n"
        "• <b>Временные</b> — автоматически удаляются через N минут\n"
        "• <b>Конфликтные</b> — работают только в режиме /stopconflict\n\n"
    )

    help_text += (
        "🔧 <b>Технологии:</b>\n"
        "• Unicode-нормализация (латиница→кириллица)\n"
        "• Обход через разделители (\"с п а м\" → \"спам\")\n"
        "• Морфологический анализ (pymorphy3)\n"
        "• SQLAlchemy + SQLite с кэшированием\n\n"
        "💾 Все настройки сохраняются в базе данных"
    )

    # Отправляем ответ
    try:
        if is_callback:
            await message.edit_text(
                text=help_text,
                parse_mode="HTML",
                reply_markup=kb()
            )
            await update.answer()
        else:
            await message.answer(
                text=help_text,
                parse_mode="HTML",
                reply_markup=kb()
            )
    except Exception as e:
        logger.error(
            f"Ошибка отправки help сообщения: {e}",
            log_type="ERROR"
        )
        if is_callback:
            await update.answer("❌ Ошибка отображения справки", show_alert=True)
