SET NAMES utf8mb4;

-- ===================== اسکلت پایه (کاربر، پرداخت، تیکت، تنظیمات) =====================
-- این بخش عیناً از پروژه فروش استارز/گیفت کپی شده چون هر رباتی که کاربر و پرداخت داره بهش نیاز داره.

CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    telegram_id BIGINT UNSIGNED NOT NULL UNIQUE,
    username VARCHAR(64) DEFAULT NULL,
    first_name VARCHAR(128) DEFAULT NULL,
    language VARCHAR(8) NOT NULL DEFAULT 'fa',
    is_admin TINYINT(1) NOT NULL DEFAULT 0,
    admin_role VARCHAR(16) DEFAULT NULL COMMENT 'full / wallet / support / NULL',
    is_blocked TINYINT(1) NOT NULL DEFAULT 0,
    balance DECIMAL(12,0) NOT NULL DEFAULT 0 COMMENT 'موجودی کیف پول به تومان',
    phone VARCHAR(32) DEFAULT NULL COMMENT 'شماره تلفن تایید‌شده کاربر',
    card_number VARCHAR(32) DEFAULT NULL COMMENT 'شماره کارت بانکی ثبت‌شده کاربر برای احراز هویت',
    card_verified TINYINT(1) NOT NULL DEFAULT 0,
    state VARCHAR(64) DEFAULT NULL,
    state_data TEXT DEFAULT NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS settings (
    `key` VARCHAR(64) PRIMARY KEY,
    `value` TEXT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS payment_cards (
    id INT AUTO_INCREMENT PRIMARY KEY,
    card_number VARCHAR(32) NOT NULL,
    holder_name VARCHAR(128) NOT NULL,
    is_active TINYINT(1) NOT NULL DEFAULT 1,
    sort_order INT NOT NULL DEFAULT 0,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS tickets (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    status ENUM('open', 'answered', 'closed') NOT NULL DEFAULT 'open',
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS ticket_messages (
    id INT AUTO_INCREMENT PRIMARY KEY,
    ticket_id INT NOT NULL,
    sender_type ENUM('user', 'admin') NOT NULL,
    sender_id INT NOT NULL COMMENT 'شناسه داخلی کاربر یا ادمینی که پیام را فرستاده',
    message_text TEXT NOT NULL,
    message_entities TEXT DEFAULT NULL COMMENT 'JSON entities تلگرام برای حفظ ایموجی پرمیوم/فرمت‌بندی',
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (ticket_id) REFERENCES tickets(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ===================== جداول مخصوص ربات‌ساز =====================

-- قالب‌های رباتی که ادمین از طریق پنل آپلود می‌کنه (مثلاً فروش استارز/گیفت، VPN، فروشگاهی)
CREATE TABLE IF NOT EXISTS bot_templates (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(128) NOT NULL COMMENT 'اسم نمایشی قالب برای مشتری',
    description TEXT DEFAULT NULL COMMENT 'توضیح کوتاه قالب',
    source_path VARCHAR(255) NOT NULL COMMENT 'مسیر فولدر سورس این قالب روی هاست (زیر templates/)',
    sql_filename VARCHAR(128) NOT NULL DEFAULT 'database.sql' COMMENT 'نام فایل SQL داخل source_path که باید روی دیتابیس مشتری اجرا بشه',
    monthly_price DECIMAL(12,0) NOT NULL COMMENT 'قیمت اشتراک ماهانه به تومان',
    is_active TINYINT(1) NOT NULL DEFAULT 1 COMMENT 'آیا برای خرید مشتری جدید در دسترسه',
    sort_order INT NOT NULL DEFAULT 0,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- استخر دیتابیس‌های از پیش‌ساخته روی cPanel که به مشتری‌های جدید اختصاص داده می‌شن
CREATE TABLE IF NOT EXISTS db_pool (
    id INT AUTO_INCREMENT PRIMARY KEY,
    db_host VARCHAR(128) NOT NULL DEFAULT 'localhost',
    db_name VARCHAR(64) NOT NULL UNIQUE,
    db_user VARCHAR(64) NOT NULL,
    db_pass VARCHAR(128) NOT NULL,
    status ENUM('free','assigned') NOT NULL DEFAULT 'free',
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- مشتری‌هایی که یک قالب رو خریداری/اشتراک کردن و رباتشون provision شده
CREATE TABLE IF NOT EXISTS customers (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL COMMENT 'کاربر ربات مادر که این ربات رو خریده',
    template_id INT NOT NULL,
    db_pool_id INT DEFAULT NULL COMMENT 'دیتابیسی که از db_pool به این مشتری اختصاص داده شده (در حالت دیتابیس مشترک NULL می‌ماند)',
    table_prefix VARCHAR(16) DEFAULT NULL COMMENT 'پیشوند اختصاصی جدول‌های این مشتری وقتی روی دیتابیس مشترک اجرا می‌شود (مثلاً c3_)',
    bot_token VARCHAR(64) NOT NULL COMMENT 'توکن رباتی که مشتری از BotFather گرفته',
    bot_username VARCHAR(64) DEFAULT NULL,
    deploy_path VARCHAR(255) DEFAULT NULL COMMENT 'مسیری که سورس این مشتری روی هاست کپی شده',
    status ENUM('pending','provisioning','active','expired','failed') NOT NULL DEFAULT 'pending',
    provision_error TEXT DEFAULT NULL COMMENT 'در صورت خطا در مرحله provisioning، پیام خطا اینجا ذخیره می‌شه',
    subscription_started_at DATETIME DEFAULT NULL,
    subscription_expires_at DATETIME DEFAULT NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id),
    FOREIGN KEY (template_id) REFERENCES bot_templates(id),
    FOREIGN KEY (db_pool_id) REFERENCES db_pool(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- سفارش/پرداخت اشتراک ماهانه (خرید اول یا تمدید) — بر پایه همون منطق کارت‌به‌کارت پروژه اصلی
CREATE TABLE IF NOT EXISTS subscription_orders (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    customer_id INT DEFAULT NULL COMMENT 'در خرید اول خالیه، بعد از provisioning پر می‌شه',
    template_id INT NOT NULL,
    kind ENUM('new','renew') NOT NULL DEFAULT 'new',
    amount_due DECIMAL(12,0) NOT NULL,
    receipt_file_id VARCHAR(256) DEFAULT NULL,
    status ENUM('awaiting_payment','awaiting_review','approved','rejected') NOT NULL DEFAULT 'awaiting_payment',
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id),
    FOREIGN KEY (customer_id) REFERENCES customers(id),
    FOREIGN KEY (template_id) REFERENCES bot_templates(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO settings (`key`,`value`) VALUES
('card_number','xxxx-xxxx-xxxx-xxxx'),
('card_holder','نام صاحب کارت'),
('support_username','@your_support'),
('support_admin_link','https://t.me/your_support'),
('subscription_days','30');
