-- ==========================================
--  V2Ray Bot - ساختار دیتابیس
-- ==========================================

CREATE DATABASE IF NOT EXISTS v2ray_bot CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE v2ray_bot;

-- جدول کاربران
CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    telegram_id BIGINT UNIQUE NOT NULL,
    username VARCHAR(255),
    first_name VARCHAR(255),
    last_name VARCHAR(255),
    balance DECIMAL(12,0) DEFAULT 0,
    state VARCHAR(100) DEFAULT 'idle',
    state_data TEXT,
    joined_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    last_activity DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    is_banned TINYINT(1) DEFAULT 0
);

-- جدول ادمین‌ها
CREATE TABLE IF NOT EXISTS admins (
    id INT AUTO_INCREMENT PRIMARY KEY,
    telegram_id BIGINT UNIQUE NOT NULL,
    username VARCHAR(255),
    added_by BIGINT,
    added_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- جدول سرورها (مخزن V2Ray)
CREATE TABLE IF NOT EXISTS servers (
    id INT AUTO_INCREMENT PRIMARY KEY,
    display_name VARCHAR(255) NOT NULL,
    server_config TEXT NOT NULL,
    product_id INT,
    is_sold TINYINT(1) DEFAULT 0,
    sold_to BIGINT DEFAULT NULL,
    sold_at DATETIME DEFAULT NULL,
    added_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- جدول محصولات / پلن‌ها
CREATE TABLE IF NOT EXISTS products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    description TEXT,
    price DECIMAL(12,0) NOT NULL,
    is_active TINYINT(1) DEFAULT 1,
    sort_order INT DEFAULT 0,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- جدول سفارشات
CREATE TABLE IF NOT EXISTS orders (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id BIGINT NOT NULL,
    product_id INT NOT NULL,
    server_id INT,
    amount DECIMAL(12,0) NOT NULL,
    status ENUM('pending','completed','cancelled') DEFAULT 'completed',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- جدول تراکنش‌های مالی
CREATE TABLE IF NOT EXISTS transactions (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id BIGINT NOT NULL,
    type ENUM('deposit','purchase','refund') NOT NULL,
    amount DECIMAL(12,0) NOT NULL,
    method VARCHAR(50),
    status ENUM('pending','approved','rejected') DEFAULT 'pending',
    receipt_file_id VARCHAR(255),
    admin_note TEXT,
    reviewed_by BIGINT,
    reviewed_at DATETIME,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- جدول تنظیمات بات
CREATE TABLE IF NOT EXISTS bot_settings (
    `key` VARCHAR(100) PRIMARY KEY,
    `value` TEXT,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- جدول درگاه‌های پرداخت
CREATE TABLE IF NOT EXISTS payment_gateways (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    type ENUM('card','zarinpal') NOT NULL,
    is_active TINYINT(1) DEFAULT 1,
    config JSON,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- جدول آموزش‌ها
CREATE TABLE IF NOT EXISTS tutorials (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    content TEXT NOT NULL,
    sort_order INT DEFAULT 0,
    is_active TINYINT(1) DEFAULT 1,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- جدول پیام‌های پشتیبانی
CREATE TABLE IF NOT EXISTS support_messages (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id BIGINT NOT NULL,
    message_text TEXT,
    file_id VARCHAR(255),
    file_type VARCHAR(50),
    reply_text TEXT,
    replied_by BIGINT,
    replied_at DATETIME,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- جدول کانال‌های عضویت اجباری
CREATE TABLE IF NOT EXISTS required_channels (
    id INT AUTO_INCREMENT PRIMARY KEY,
    channel_id VARCHAR(100) NOT NULL,
    channel_title VARCHAR(255),
    channel_username VARCHAR(255),
    is_active TINYINT(1) DEFAULT 1,
    added_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- تنظیمات پیش‌فرض
INSERT IGNORE INTO bot_settings (`key`, `value`) VALUES
('bot_active', '1'),
('menu_shop', '1'),
('menu_wallet', '1'),
('menu_my_services', '1'),
('menu_tutorial', '1'),
('menu_support', '1'),
('menu_prices', '1'),
('menu_shop_text', '🛒 خرید سرویس'),
('menu_wallet_text', '💰 کیف پول'),
('menu_my_services_text', '📦 سرویس‌های من'),
('menu_tutorial_text', '📚 آموزش اتصال'),
('menu_support_text', '🎧 پشتیبانی'),
('menu_prices_text', '💲 لیست قیمت‌ها'),
('welcome_message', 'سلام! به ربات فروش V2Ray خوش آمدید 🎉\n\nاز منوی زیر انتخاب کنید:'),
('support_note', 'پیام شما به صورت ناشناس ارسال می‌شود. لطفاً سوال خود را بنویسید:');

-- درگاه‌های پرداخت پیش‌فرض
INSERT IGNORE INTO payment_gateways (name, type, is_active, config) VALUES
('کارت به کارت', 'card', 0, '{"card_number": "6037-XXXX-XXXX-XXXX", "card_holder": "نام صاحب کارت", "bank_name": "بانک"}'),
('زرین‌پال', 'zarinpal', 0, '{"merchant_id": "YOUR-ZARINPAL-MERCHANT-ID", "sandbox": false}');

-- ==========================================
--  آپدیت: گردونه شانس و سرور تست
-- ==========================================

-- جدول لاگ گردونه شانس
CREATE TABLE IF NOT EXISTS lucky_wheel_log (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id BIGINT NOT NULL,
    dice_value TINYINT NOT NULL,
    won TINYINT(1) DEFAULT 0,
    prize_amount DECIMAL(12,0) DEFAULT 0,
    played_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- جدول سرورهای تست
CREATE TABLE IF NOT EXISTS test_servers (
    id INT AUTO_INCREMENT PRIMARY KEY,
    display_name VARCHAR(255) NOT NULL,
    server_config TEXT NOT NULL,
    is_active TINYINT(1) DEFAULT 1,
    added_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- جدول لاگ دریافت سرور تست
CREATE TABLE IF NOT EXISTS test_server_log (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id BIGINT NOT NULL,
    server_id INT NOT NULL,
    given_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- تنظیمات جدید
INSERT IGNORE INTO bot_settings (`key`, `value`) VALUES
('menu_lucky_wheel', '1'),
('menu_lucky_wheel_text', '🎰 گردونه شانس'),
('menu_test_server', '1'),
('menu_test_server_text', '🆓 سرور تست'),
('lucky_wheel_prize', '10000'),
('lucky_wheel_active', '1'),
('test_server_active', '1');
