from telegram.ext import ContextTypes
from datetime import datetime, timedelta
import database as db
from config import ADMIN_IDS
import shutil, os

async def check_expiring_accounts(context: ContextTypes.DEFAULT_TYPE):
    """یادآوری انقضا چندمرحله‌ای"""
    for days in [7, 3, 1]:
        orders = db.get_expiring_orders(days)
        for order in orders:
            try:
                await context.bot.send_message(
                    order['user_id'],
                    f"⏰ یادآوری انقضا\n\n"
                    f"📦 اکانت {order['service']} شما {days} روز دیگر منقضی می‌شود!\n\n"
                    f"🔄 همین الان تمدید کنید و از تخفیف ویژه تمدید بهره‌مند شوید.",
                    reply_markup=__import__('telegram').InlineKeyboardMarkup([
                        [__import__('telegram').InlineKeyboardButton("🔄 تمدید اکانت", callback_data=f"renew_{order['id']}")]
                    ])
                )
                db.mark_notified(order['id'], days)
            except:
                pass

async def daily_report(context: ContextTypes.DEFAULT_TYPE):
    """گزارش روزانه به ادمین"""
    s = db.get_stats()
    text = (
        f"📊 گزارش روزانه - {datetime.now().strftime('%Y/%m/%d')}\n\n"
        f"📦 سفارش امروز: {s['today_orders']}\n"
        f"💰 درآمد امروز: {s['today_revenue']:,} تومان\n"
        f"⏳ در انتظار بررسی: {s['pending_orders']}\n"
        f"👥 کل کاربران: {s['total_users']}\n"
        f"💰 درآمد کل: {s['total_revenue']:,} تومان"
    )
    for admin_id in ADMIN_IDS:
        try:
            await context.bot.send_message(admin_id, text)
        except:
            pass

async def auto_backup(context: ContextTypes.DEFAULT_TYPE):
    """بکاپ خودکار شبانه"""
    try:
        backup_name = f"backup_{datetime.now().strftime('%Y%m%d_%H%M%S')}.db"
        shutil.copy('database.db', backup_name)
        for admin_id in ADMIN_IDS:
            try:
                with open(backup_name, 'rb') as f:
                    await context.bot.send_document(
                        admin_id,
                        document=f,
                        filename=backup_name,
                        caption=f"💾 بکاپ خودکار - {datetime.now().strftime('%Y/%m/%d %H:%M')}"
                    )
            except:
                pass
        os.remove(backup_name)
    except Exception as e:
        print(f"خطا در بکاپ: {e}")

async def check_subscriptions(context: ContextTypes.DEFAULT_TYPE):
    """بررسی اشتراک‌های اتوماتیک"""
    conn = db.get_db()
    c = conn.cursor()
    c.execute("SELECT * FROM subscriptions WHERE is_active=1 AND next_renewal <= ?",
              (datetime.now().isoformat(),))
    subs = [dict(r) for r in c.fetchall()]
    conn.close()

    for sub in subs:
        product = db.get_product(sub['product_id'])
        if not product:
            continue
        user = db.get_user(sub['user_id'])
        if not user:
            continue

        try:
            from config import CARD_NUMBER, CARD_HOLDER, BANK_NAME
            await context.bot.send_message(
                sub['user_id'],
                f"🔄 تمدید اشتراک\n\n"
                f"📦 {product['service']} - {product['duration']}\n"
                f"💰 {product['price']:,} تومان\n\n"
                f"برای تمدید اشتراک واریز کنید:\n"
                f"🏦 {BANK_NAME}\n💳 `{CARD_NUMBER}`\n👤 {CARD_HOLDER}",
                parse_mode='Markdown',
                reply_markup=__import__('telegram').InlineKeyboardMarkup([
                    [__import__('telegram').InlineKeyboardButton("✅ پرداخت کردم", callback_data=f"sub_renew_{sub['id']}")]
                ])
            )
            # به‌روز تاریخ تمدید بعدی
            months = 1
            if '3' in product['duration']: months = 3
            elif '6' in product['duration']: months = 6
            elif '12' in product['duration']: months = 12
            next_renewal = (datetime.now() + timedelta(days=30*months)).isoformat()
            conn = db.get_db()
            conn.execute("UPDATE subscriptions SET next_renewal=? WHERE id=?", (next_renewal, sub['id']))
            conn.commit()
            conn.close()
        except:
            pass

async def auto_price_update(context):
    """بروزرسانی خودکار قیمت‌ها از نرخ دلار"""
    from utils.price_updater import auto_update_prices
    await auto_update_prices(context)
