"""Central runtime registration."""

from __future__ import annotations

import logging

from telegram import Update
from telegram.ext import Application, ApplicationHandlerStop, ContextTypes, MessageHandler, filters

from bot import listener, middleware
from bot.core.reporting import report_error
from bot.handlers import broadcast, downloader, health, learning, moderation, panel, utility
from bot.persian_router import dispatch as persian_dispatch


logger = logging.getLogger(__name__)


def register_handlers(app: Application) -> None:
    middleware.register(app)

    downloader.register(app)

    async def _persian_wrapper(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
        if await persian_dispatch(update, context):
            raise ApplicationHandlerStop

    app.add_handler(MessageHandler(filters.TEXT, _persian_wrapper), group=-1)

    learning.register(app)
    panel.register(app)
    moderation.register(app)
    utility.register(app)
    broadcast.register(app)
    health.register(app)

    app.add_handler(
        MessageHandler(filters.ALL & ~filters.COMMAND, listener.on_message),
        group=99,
    )

    app.add_handler(
        MessageHandler(filters.StatusUpdate.NEW_CHAT_MEMBERS, listener.on_new_members),
        group=100,
    )

    app.add_handler(
        MessageHandler(filters.StatusUpdate.LEFT_CHAT_MEMBER, listener.on_left_member),
        group=100,
    )

    app.add_handler(
        MessageHandler(filters.UpdateType.EDITED_MESSAGE, listener.on_edited),
        group=100,
    )

    app.add_error_handler(report_error)

    logger.info("Runtime handlers registered")
