"""
Handlers for default diet templates (رژیم پیش‌فرض).
"""
from telegram import Update, InlineKeyboardMarkup, InlineKeyboardButton
from telegram.ext import (
    ContextTypes, ConversationHandler,
    MessageHandler, CallbackQueryHandler, filters,
)

import database.db as db
from config.settings import DEF_DIET_NAME, DEF_DIET_TEXT
from utils.keyboards import (
    MAIN_COACH_KB, BACK_KB,
    default_diet_menu_kb,
    default_diets_kb,
    diet_detail_kb,
)
from utils.helpers import go_main_menu, track_message


async def default_diet_menu(update: Update, context: ContextTypes.DEFAULT_TYPE):
    sent = await update.message.reply_text(
        "🥗 *رژیم پیش‌فرض*\nیکی از گزینه‌ها را انتخاب کن:",
        reply_markup=default_diet_menu_kb(),
        parse_mode="Markdown",
    )
    track_message(context, update.effective_chat.id, sent.message_id)


async def def_diet_list(update: Update, context: ContextTypes.DEFAULT_TYPE):
    query = update.callback_query
    await query.answer()
    diets = db.get_all_default_diets()
    if not diets:
        sent = await query.message.reply_text("❌ هیچ رژیمی ثبت نشده.")
        track_message(context, query.message.chat_id, sent.message_id)
        return
    sent = await query.message.reply_text(
        "🥗 *رژیم‌های پیش‌فرض:*",
        reply_markup=default_diets_kb(diets),
        parse_mode="Markdown",
    )
    track_message(context, query.message.chat_id, sent.message_id)


async def def_diet_view(update: Update, context: ContextTypes.DEFAULT_TYPE):
    query = update.callback_query
    await query.answer()
    diet_id = int(query.data.split("_")[-1])
    diet = db.get_default_diet(diet_id)
    text = f"🥗 *{diet['name']}*\n\n{diet['diet_text']}"
    sent = await query.message.reply_text(
        text,
        reply_markup=diet_detail_kb(diet_id),
        parse_mode="Markdown",
    )
    track_message(context, query.message.chat_id, sent.message_id)


async def def_diet_delete(update: Update, context: ContextTypes.DEFAULT_TYPE):
    query = update.callback_query
    await query.answer()
    diet_id = int(query.data.split("_")[-1])
    diet = db.get_default_diet(diet_id)
    db.delete_default_diet(diet_id)
    sent = await query.message.reply_text(f"🗑 رژیم «{diet['name']}» حذف شد.", reply_markup=MAIN_COACH_KB)
    track_message(context, query.message.chat_id, sent.message_id)


async def def_diet_add_start(update: Update, context: ContextTypes.DEFAULT_TYPE):
    query = update.callback_query
    await query.answer()
    sent = await query.message.reply_text("📝 نام رژیم را وارد کن:", reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton("🔙 بازگشت", callback_data="main_menu")]]))
    track_message(context, query.message.chat_id, sent.message_id)
    return DEF_DIET_NAME


async def def_diet_got_name(update: Update, context: ContextTypes.DEFAULT_TYPE):
    context.user_data["new_diet_name"] = update.message.text.strip()
    sent = await update.message.reply_text("📄 متن رژیم را وارد کن:", reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton("🔙 بازگشت", callback_data="main_menu")]]))
    track_message(context, update.effective_chat.id, sent.message_id)
    return DEF_DIET_TEXT


async def def_diet_got_text(update: Update, context: ContextTypes.DEFAULT_TYPE):
    name = context.user_data["new_diet_name"]
    text = update.message.text.strip()
    db.create_default_diet(name, text)
    context.user_data.clear()
    sent = await update.message.reply_text(f"✅ رژیم «{name}» ذخیره شد.", reply_markup=MAIN_COACH_KB)
    track_message(context, update.effective_chat.id, sent.message_id)
    return ConversationHandler.END


async def _cancel(update, context):
    await go_main_menu(update, context)
    return ConversationHandler.END


add_diet_conv = ConversationHandler(
    entry_points=[CallbackQueryHandler(def_diet_add_start, pattern="^def_diet_add$")],
    states={
        DEF_DIET_NAME: [MessageHandler(filters.TEXT & ~filters.COMMAND, def_diet_got_name)],
        DEF_DIET_TEXT: [MessageHandler(filters.TEXT & ~filters.COMMAND, def_diet_got_text)],
    },
    fallbacks=[
        CallbackQueryHandler(_cancel, pattern="^main_menu$"),
    ],
    per_message=False,
    allow_reentry=True,
)


def register(app):
    from telegram.ext import MessageHandler, filters as f
    app.add_handler(MessageHandler(f.Regex("^🥗 رژیم پیش‌فرض$"), default_diet_menu))
    app.add_handler(add_diet_conv)
    app.add_handler(CallbackQueryHandler(def_diet_list,   pattern="^def_diet_list$"))
    app.add_handler(CallbackQueryHandler(def_diet_view,   pattern=r"^def_diet_\d+$"))
    app.add_handler(CallbackQueryHandler(def_diet_delete, pattern=r"^del_def_diet_\d+$"))
