"""
User data wipe handlers.
"""
import contextlib
import logging

from aiogram import Router, F
from aiogram.types import CallbackQuery
from aiogram.fsm.context import FSMContext

from src.bot.states.survey import SurveyFSM
from src.database.db_methods.users import delete_user_by_tg
from src.database.session import SessionLocal

logger = logging.getLogger(__name__)
router = Router(name="wipe_handlers")


@contextlib.asynccontextmanager
async def session_scope():
    """Database session context manager."""
    session = SessionLocal()
    try:
        yield session
        await session.commit()
    except Exception:
        await session.rollback()
        raise
    finally:
        await session.close()


@router.callback_query(F.data == "wipe:yes")
async def confirm_wipe(cb: CallbackQuery, state: FSMContext):
    """
    Confirm user data wipe and restart survey.
    """
    tg_id = str(cb.from_user.id)
    
    async with session_scope() as session:
        await delete_user_by_tg(session, tg_id)

    await state.clear()
    await cb.message.edit_text("🧹 Всё удалено. Начнём заново.\nКак тебя зовут? Впиши полное имя.")
    await state.set_state(SurveyFSM.name)
    await cb.answer()


@router.callback_query(F.data == "wipe:no")
async def cancel_wipe(cb: CallbackQuery, state: FSMContext):
    """
    Cancel user data wipe.
    """
    await cb.message.edit_text("Ок, старая анкета сохранена. Можешь продолжать работу со стратегией 👍")
    await cb.answer()
