import aiosqlite
from config import DB_PATH

async def init_db():
    async with aiosqlite.connect(DB_PATH) as db:
        # جدول کاربران
        await db.execute("""
            CREATE TABLE IF NOT EXISTS users (
                user_id INTEGER PRIMARY KEY,
                username TEXT,
                full_name TEXT,
                balance INTEGER DEFAULT 0,
                referred_by INTEGER DEFAULT NULL,
                ref_count INTEGER DEFAULT 0,
                ref_buyers_count INTEGER DEFAULT 0,
                ref_orders_count INTEGER DEFAULT 0,
                total_earned INTEGER DEFAULT 0,
                created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
            )
        """)

        # جدول ادمین‌های افزوده شده از پنل
        await db.execute("""
            CREATE TABLE IF NOT EXISTS admins (
                user_id INTEGER PRIMARY KEY,
                username TEXT,
                created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
            )
        """)

        # جدول دسته‌بندی‌ها
        await db.execute("""
            CREATE TABLE IF NOT EXISTS categories (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                name TEXT NOT NULL,
                position INTEGER DEFAULT 0,
                style TEXT DEFAULT 'success'
            )
        """)
        
        # جدول محصولات
        await db.execute("""
            CREATE TABLE IF NOT EXISTS products (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                category_id INTEGER,
                name TEXT NOT NULL,
                description TEXT,
                price INTEGER NOT NULL,
                delivery_type TEXT DEFAULT 'auto',
                stock_data TEXT,
                media_type TEXT DEFAULT NULL,
                media_file_id TEXT DEFAULT NULL,
                FOREIGN KEY (category_id) REFERENCES categories (id) ON DELETE CASCADE
            )
        """)

        # بروزرسانی ستون‌های جدول محصولات در صورت وجود دیتابیس قدیمی
        prod_cols = [
            ("media_type", "TEXT DEFAULT NULL"),
            ("media_file_id", "TEXT DEFAULT NULL")
        ]
        for col_name, col_type in prod_cols:
            try:
                await db.execute(f"ALTER TABLE products ADD COLUMN {col_name} {col_type}")
            except Exception:
                pass

        # جدول موجودی لینک‌های اختصاصی VPN
        await db.execute("""
            CREATE TABLE IF NOT EXISTS vpn_stock (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                product_id INTEGER,
                link TEXT NOT NULL,
                status TEXT DEFAULT 'available',
                used_by INTEGER,
                order_id INTEGER,
                created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                FOREIGN KEY (product_id) REFERENCES products (id) ON DELETE CASCADE
            )
        """)
        
        # جدول کدهای تخفیف
        await db.execute("""
            CREATE TABLE IF NOT EXISTS discount_codes (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                code TEXT UNIQUE NOT NULL,
                discount_type TEXT DEFAULT 'percent',
                value INTEGER NOT NULL,
                scope TEXT DEFAULT 'all',
                target_id INTEGER DEFAULT NULL,
                max_uses INTEGER DEFAULT -1,
                used_count INTEGER DEFAULT 0
            )
        """)

        # جدول کانال‌های اسپانسری
        await db.execute("""
            CREATE TABLE IF NOT EXISTS sponsor_channels (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                channel_id TEXT NOT NULL,
                title TEXT NOT NULL,
                invite_link TEXT NOT NULL
            )
        """)

        # جدول سفارشات
        await db.execute("""
            CREATE TABLE IF NOT EXISTS orders (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                user_id INTEGER,
                product_id INTEGER,
                price INTEGER,
                status TEXT DEFAULT 'در حال انجام',
                delivered_content TEXT,
                created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
            )
        """)
        
        # جدول تیکت‌های پشتیبانی
        await db.execute("""
            CREATE TABLE IF NOT EXISTS tickets (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                user_id INTEGER,
                subject TEXT,
                status TEXT DEFAULT 'open',
                created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
            )
        """)
        
        # پیام‌های تیکت
        await db.execute("""
            CREATE TABLE IF NOT EXISTS ticket_messages (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                ticket_id INTEGER,
                sender TEXT,
                message_text TEXT,
                photo_id TEXT,
                created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
            )
        """)
        
        # رسیدهای شارژ
        await db.execute("""
            CREATE TABLE IF NOT EXISTS receipts (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                user_id INTEGER,
                photo_id TEXT,
                caption TEXT,
                status TEXT DEFAULT 'pending',
                created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
            )
        """)

        # تنظیمات عمومی، ولت‌ها، درگاه‌ها و گروه رسیدها
        await db.execute("""
            CREATE TABLE IF NOT EXISTS settings (
                key TEXT PRIMARY KEY,
                value TEXT
            )
        """)

        default_settings = [
            ("bank_card", "ثبت نشده"),
            ("card_owner", "ثبت نشده"),
            ("enable_card", "1"),
            ("enable_stars", "1"),
            ("enable_ton", "1"),
            ("enable_trx", "1"),
            ("ton_wallet", ""),
            ("trx_wallet", ""),
            ("star_usd_price", "0.016"),
            ("referral_percent", "30"),
            ("log_channel", ""),
            ("log_footer_text", "ممنون از اعتماد شما ❤️"),
            ("receipt_group", "")
        ]

        for key, val in default_settings:
            await db.execute(
                "INSERT OR IGNORE INTO settings (key, value) VALUES (?, ?)",
                (key, val)
            )

        # دکمه‌های اصلی
        await db.execute("""
            CREATE TABLE IF NOT EXISTS bot_buttons (
                key TEXT PRIMARY KEY,
                text TEXT NOT NULL,
                style TEXT DEFAULT NULL
            )
        """)

        default_buttons = [
            ("btn_orders", "📦 سفارشات من", None),
            ("btn_charge", "💳 شارژ حساب", "success"),
            ("btn_vpns", "🌐 وی‌پی‌ان‌های من", "primary"),
            ("btn_referral", "💰 کسب درآمد", "success"),
            ("btn_support", "🎫 پشتیبانی و تیکت", None),
            ("btn_profile", "👤 حساب کاربری", None),
            ("btn_admin", "🔴 ⚙️ پنل مدیریت ادمین", "danger")
        ]

        for key, text, style in default_buttons:
            await db.execute(
                "INSERT OR IGNORE INTO bot_buttons (key, text, style) VALUES (?, ?, ?)",
                (key, text, style)
            )

        await db.commit()