import logging, datetime
from telegram.ext import Application, CommandHandler, MessageHandler, CallbackQueryHandler, filters
from config import BOT_TOKEN
from handlers import user_handlers, admin_handlers, order_handlers, config_handlers
from utils import scheduler

logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO,
    handlers=[logging.FileHandler('bot.log'), logging.StreamHandler()])

def main():
    app = Application.builder().token(BOT_TOKEN).build()

    # Commands
    app.add_handler(CommandHandler("start", user_handlers.start))
    app.add_handler(CommandHandler("orders", user_handlers.my_orders))
    app.add_handler(CommandHandler("wallet", user_handlers.show_wallet))
    app.add_handler(CommandHandler("referral", user_handlers.show_referral))
    app.add_handler(CommandHandler("reviews", user_handlers.show_reviews))
    app.add_handler(CommandHandler("configs", config_handlers.show_my_configs))
    app.add_handler(CommandHandler("admin", admin_handlers.admin_panel))
    app.add_handler(CommandHandler("stats", admin_handlers.stats))
    app.add_handler(CommandHandler("listorders", admin_handlers.list_orders))
    app.add_handler(CommandHandler("broadcast", admin_handlers.broadcast_start))

    # Callbacks - config protocol
    app.add_handler(CallbackQueryHandler(config_handlers.handle_protocol_callback, pattern="^cfg_proto_"))
    # Callbacks - config
    app.add_handler(CallbackQueryHandler(config_handlers.handle_config_callbacks, pattern="^(cfg_|adm_cfg_)"))
    # Callbacks - product management
    app.add_handler(CallbackQueryHandler(
        admin_handlers.handle_product_callbacks,
        pattern="^(prod_)"
    ))
    # Callbacks - admin theme
    app.add_handler(CallbackQueryHandler(admin_handlers.handle_admin_callbacks,
        pattern="^(adm_|editprice_|new_discount|flashsale_|toggle_|set_work|setcolor_|edittheme_|adm_back|autoprice_)"))
    # Callbacks - user & orders
    app.add_handler(CallbackQueryHandler(user_handlers.button_handler,
        pattern="^(menu_|check_join|service_|product_|confirm_order_|dopay_|enter_discount_|free_trial_|bulk_|approve_|reject_|rate_|send_account_|new_ticket|live_chat|reply_ticket_|back_services|sub_renew_|renew_|pay_)"))

    # Messages
    app.add_handler(MessageHandler(filters.CONTACT, user_handlers.handle_contact))
    app.add_handler(MessageHandler(filters.PHOTO, order_handlers.handle_receipt_photo))
    app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, user_handlers.handle_message))

    # Scheduler
    jq = app.job_queue
    jq.run_daily(scheduler.daily_report,     time=datetime.time(8,0,0))
    jq.run_daily(scheduler.auto_backup,      time=datetime.time(3,0,0))
    jq.run_repeating(scheduler.check_expiring_accounts, interval=3600, first=60)
    jq.run_repeating(scheduler.check_subscriptions,     interval=3600, first=120)

    jq.run_repeating(scheduler.auto_price_update, interval=21600, first=300)  # هر ۶ ساعت
    print("✅ ربات شروع به کار کرد...")
    app.run_polling(allowed_updates=["message", "callback_query"])

if __name__ == "__main__":
    main()
