# app/src/telegram/handlers/start.py

from __future__ import annotations

from aiogram import F, Router
from aiogram.filters import Command
from aiogram.fsm.context import FSMContext
from aiogram.types import Message

from src.core.system_status import build_system_text
from src.telegram.handlers.auto.main import render_auto_screen
from src.telegram.keyboards.reply import build_main_menu_keyboard
from src.telegram.live.active_screen import ActiveScreenManager
from src.telegram.menus import MAIN_MENU_TEXT


router = Router(name="start")


# показать только reply-меню без открытия live-экрана
async def _show_main_menu(
    message: Message,
) -> None:
    await message.answer(
        MAIN_MENU_TEXT,
        reply_markup=build_main_menu_keyboard(),
    )


# открыть главный рабочий экран проекта — Автоторговлю
async def _open_auto_start_screen(
    message: Message,
) -> None:
    bot = message.bot

    if bot is None:
        return

    # сначала прикрепляем основное reply-меню,
    # потому что экран Автоторговли использует inline-кнопки
    await message.answer(
        "Открываю Автоторговлю.",
        reply_markup=build_main_menu_keyboard(),
    )

    # очищаем предыдущий активный экран перед открытием Автоторговли
    await ActiveScreenManager.prepare_new_screen(
        screen="auto",
        bot=bot,
        chat_id=message.chat.id,
    )

    await render_auto_screen(
        message,
        edit_mode=False,
    )


@router.message(Command("start"))
async def cmd_start(
    message: Message,
    state: FSMContext,
) -> None:
    await state.clear()

    await _open_auto_start_screen(message)


@router.message(Command("menu"))
async def cmd_menu(
    message: Message,
    state: FSMContext,
) -> None:
    await state.clear()

    await _show_main_menu(message)


@router.message(Command("help"))
async def cmd_help(
    message: Message,
    state: FSMContext,
) -> None:
    await state.clear()

    await message.answer(
        build_system_text(),
        reply_markup=build_main_menu_keyboard(),
    )


@router.message(F.text == "Меню")
async def menu_shortcut(
    message: Message,
    state: FSMContext,
) -> None:
    await state.clear()

    await _show_main_menu(message)