"""
main.py — Gym Bot entry point.
Supports both local run and cloud hosting (Render/Railway).
"""
import sys, logging, os
from datetime import time as dtime

logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s %(levelname)s %(name)s: %(message)s"
)

def check_version():
    import telegram
    ver = tuple(int(x) for x in telegram.__version__.split(".")[:2])
    if ver < (20, 0):
        print(f"❌ نیاز به python-telegram-bot >= 20. نسخه فعلی: {telegram.__version__}")
        sys.exit(1)
    print(f"✅ python-telegram-bot {telegram.__version__}")
check_version()

from telegram.ext import Application
from config.settings import TOKEN
from database.db import initialize

import handlers.start            as start_h
import handlers.self_register    as self_register_h
import handlers.web_auth         as web_auth_h
import handlers.athletes         as athletes_h
import handlers.default_training as def_training_h
import handlers.default_diet     as def_diet_h
import handlers.athlete_programs as ath_programs_h
import handlers.shop             as shop_h
import handlers.messaging        as msg_h
# import handlers.handwritten      as hw_h  # غیرفعال


async def daily_cleanup(context):
    """Delete all tracked bot messages once per day."""
    for key in [k for k in context.bot_data if k.startswith("bot_msgs_")]:
        chat_id = int(key.split("bot_msgs_")[1])
        for msg_id in context.bot_data.get(key, []):
            try:
                await context.bot.delete_message(chat_id=chat_id, message_id=msg_id)
            except Exception:
                pass
        context.bot_data[key] = []


def main():
    initialize()
    print("✅ Database initialized.")

    # Start keep-alive HTTP server for cloud hosting
    try:
        from keep_alive import start_keep_alive
        port = int(os.environ.get("PORT", 8080))
        start_keep_alive(port)
    except Exception as e:
        print(f"ℹ️  Keep-alive skipped: {e}")

    app = Application.builder().token(TOKEN).build()
    app.job_queue.run_daily(daily_cleanup, time=dtime(0, 0, 0))

    # Register all handlers (ConversationHandlers must come first)
    self_register_h.register(app)
    web_auth_h.register(app)
    start_h.register(app)
    msg_h.register(app)          # ← broadcast + messaging (must be before athletes)
    shop_h.register(app)         # ← shop (must be before athletes)
    athletes_h.register(app)
    def_training_h.register(app)
    def_diet_h.register(app)
    ath_programs_h.register(app)
    # hw_h.register(app)         # ← handwritten OCR (غیرفعال)

    print("🤖 Bot running... Press Ctrl+C to stop.")
    app.run_polling(
        allowed_updates=["message", "callback_query"],
        drop_pending_updates=True
    )


if __name__ == "__main__":
    main()
