from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton
from telebot import logger
from app.bot.constants import UserStates
from app.bot.utils.auth import auth
from app.bot.utils.helpers import get_user_subscribed_regions
from app.bot.utils.regions import format_regions_list
from app.bot.processors.unsubscribe_processor import process_unsubscribe_button


def register_handlers(bot, app, state_manager):
    @bot.message_handler(commands=['unsubscribe'])
    @bot.message_handler(func=lambda message: message.text == 'Отписаться')
    def handle_unsubscribe(message):
        with app.app_context():
            chat_id = message.chat.id
            username = f"{message.from_user.username}" if message.from_user.username else "N/A"
            if not auth(chat_id, app):
                bot.send_message(chat_id, "Вы не авторизованы для использования этого бота.")
                logger.warning(f"Неавторизованный пользователь {chat_id} @{username}")
                state_manager.set_state(chat_id, UserStates.REGISTRATION)
                return
            else:
                state_manager.set_state(chat_id, UserStates.WAITING_INPUT)

            user_subscriptions = get_user_subscribed_regions(chat_id)
            formated_user_subscriptions = format_regions_list(user_subscriptions)

            markup = InlineKeyboardMarkup()
            markup.add(InlineKeyboardButton("Отмена", callback_data="cancel_input"))

            bot.send_message(chat_id,
                             f"Введите номер(а) региона(ов) через запятую подписки которых вы хотите удалить:\n\n{formated_user_subscriptions}",
                             reply_markup=markup)

            bot.register_next_step_handler(message, process_unsubscribe_button, app, bot, chat_id, state_manager)