from aiogram import Router, F
from aiogram.filters import Command
from aiogram.fsm.context import FSMContext
from aiogram.types import Message, CallbackQuery, InlineKeyboardButton
from aiogram.utils.i18n import gettext as _
from aiogram.utils.keyboard import InlineKeyboardBuilder

from bot.core.bots import BotInfo
from bot.templates import msg_photo
from configs import COMMANDS, RpValue
from .new_cmd import user_topic_map  # Импортируем мапу топиков из модуля new

__all__ = ("router",)
CMD: str = "start".casefold()
router: Router = Router(name=f"{CMD}_cmd_router")


@router.callback_query(F.data.casefold() == CMD)
@router.message(Command(*COMMANDS[CMD], prefix=BotInfo.prefix, ignore_case=True))
async def start_cmd(update: Message | CallbackQuery, state: FSMContext) -> None:
    """Обработчик команды /start"""
    # Определяем тип update
    if isinstance(update, CallbackQuery):
        message = update.message
        callback = update
    else:
        message = update
        callback = None

    # Проверяем, есть ли у пользователя активный топик
    user_id = update.from_user.id
    has_active_topic = user_id in user_topic_map

    # Создание инлайн-клавиатуры
    ikb: InlineKeyboardBuilder = InlineKeyboardBuilder()
    ikb.row(InlineKeyboardButton(text="Википедия🌐", url="https://t.me/PrimoWiki"))

    if has_active_topic:
        # Если есть активный топик, показываем кнопку "Продолжить диалог"
        ikb.row(InlineKeyboardButton(text="Продолжить диалог💬", callback_data='continue_dialog'))
    else:
        # Если нет активного топика, показываем кнопку "Связаться"
        ikb.row(InlineKeyboardButton(text="Связаться👀", callback_data='new'))

    # Формируем приветственное сообщение
    text: str = _(
        """Добро пожаловать, <a href="{url}">{name}</a>!

Я ваш помощник по проекту — <b>PrimoWiki</b>! 
Моя цель — помочь вам сориентироваться и сделать ваше вступление куда проще! 

Надеюсь, я смогу вам помочь! Пожалуйста, выберите нужную функцию на клавиатуре!
"""
    ).format(
        url=update.from_user.url,
        name=update.from_user.first_name,
        rp_name=RpValue.RP_NAME,
    )

    # Добавляем информацию об активном диалоге, если есть
    if has_active_topic:
        text += "\n\n💬 <b>У вас есть активный диалог с поддержкой!</b>"

    # Отправляем сообщение
    await msg_photo(message=message, text=text, file=f'assets/{CMD}.jpg', markup=ikb)

    if callback:
        await callback.answer()
