-- ==========================================
--  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 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 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}');
