-- ====================================================
--  V2Ray Bot — Database Schema
-- ====================================================

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

-- کاربران
CREATE TABLE IF NOT EXISTS users (
    id            BIGINT PRIMARY KEY,          -- telegram user id
    username      VARCHAR(100),
    first_name    VARCHAR(100),
    last_name     VARCHAR(100),
    phone         VARCHAR(20),
    wallet        DECIMAL(15,0) DEFAULT 0,     -- موجودی کیف پول (تومان)
    referral_by   BIGINT DEFAULT NULL,
    referral_code VARCHAR(20) UNIQUE,
    is_banned     TINYINT(1) DEFAULT 0,
    created_at    TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- پلن‌ها
CREATE TABLE IF NOT EXISTS plans (
    id          INT AUTO_INCREMENT PRIMARY KEY,
    name        VARCHAR(100) NOT NULL,
    description TEXT,
    traffic_gb  INT NOT NULL,               -- حجم به گیگابایت (0 = نامحدود)
    days        INT NOT NULL,               -- تعداد روز
    price       DECIMAL(15,0) NOT NULL,     -- قیمت تومان
    sort_order  INT DEFAULT 0,
    is_active   TINYINT(1) DEFAULT 1,
    created_at  TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- سرورها (کانفیگ‌های دستی)
CREATE TABLE IF NOT EXISTS servers (
    id          INT AUTO_INCREMENT PRIMARY KEY,
    name        VARCHAR(150) NOT NULL,       -- نام نمایشی (مثلاً: آلمان 1)
    flag        VARCHAR(10) DEFAULT '🌍',
    protocol    ENUM('vmess','vless','trojan','shadowsocks') DEFAULT 'vmess',
    config_text TEXT NOT NULL,              -- کانفیگ کامل که به کاربر ارسال می‌شود
    qr_file_id  VARCHAR(200),               -- file_id تصویر QR (اختیاری)
    capacity    INT DEFAULT 100,            -- حداکثر کاربر همزمان
    used_count  INT DEFAULT 0,
    is_active   TINYINT(1) DEFAULT 1,
    notes       TEXT,                       -- یادداشت ادمین
    created_at  TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- ارتباط پلن ↔ سرور (هر پلن می‌تواند چند سرور داشته باشد)
CREATE TABLE IF NOT EXISTS plan_servers (
    plan_id     INT NOT NULL,
    server_id   INT NOT NULL,
    PRIMARY KEY (plan_id, server_id)
);

-- سفارش‌ها
CREATE TABLE IF NOT EXISTS orders (
    id              INT AUTO_INCREMENT PRIMARY KEY,
    user_id         BIGINT NOT NULL,
    plan_id         INT NOT NULL,
    server_id       INT DEFAULT NULL,       -- سرور اختصاص‌داده‌شده توسط ادمین
    amount          DECIMAL(15,0) NOT NULL,
    discount_amount DECIMAL(15,0) DEFAULT 0,
    coupon_code     VARCHAR(30) DEFAULT NULL,
    payment_method  ENUM('card','wallet') DEFAULT 'card',
    status          ENUM('pending','payment_sent','confirmed','delivered','cancelled','refunded') DEFAULT 'pending',
    receipt_file_id VARCHAR(200),           -- تصویر رسید پرداخت
    config_sent_at  TIMESTAMP NULL,
    expires_at      TIMESTAMP NULL,        -- تاریخ انقضای سرویس
    notes           TEXT,
    created_at      TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at      TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- کدهای تخفیف
CREATE TABLE IF NOT EXISTS coupons (
    id              INT AUTO_INCREMENT PRIMARY KEY,
    code            VARCHAR(30) UNIQUE NOT NULL,
    discount_type   ENUM('percent','fixed') DEFAULT 'percent',
    discount_value  DECIMAL(10,2) NOT NULL,
    min_order       DECIMAL(15,0) DEFAULT 0,
    max_uses        INT DEFAULT NULL,       -- NULL = نامحدود
    used_count      INT DEFAULT 0,
    plan_id         INT DEFAULT NULL,       -- NULL = همه پلن‌ها
    expires_at      TIMESTAMP NULL,
    is_active       TINYINT(1) DEFAULT 1,
    created_at      TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- تراکنش‌های کیف پول
CREATE TABLE IF NOT EXISTS wallet_transactions (
    id          INT AUTO_INCREMENT PRIMARY KEY,
    user_id     BIGINT NOT NULL,
    amount      DECIMAL(15,0) NOT NULL,    -- مثبت = شارژ، منفی = برداشت
    type        ENUM('charge','purchase','refund','referral','bonus') NOT NULL,
    order_id    INT DEFAULT NULL,
    description VARCHAR(255),
    created_at  TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- تیکت‌های پشتیبانی
CREATE TABLE IF NOT EXISTS tickets (
    id          INT AUTO_INCREMENT PRIMARY KEY,
    user_id     BIGINT NOT NULL,
    subject     VARCHAR(200),
    status      ENUM('open','answered','closed') DEFAULT 'open',
    created_at  TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE IF NOT EXISTS ticket_messages (
    id          INT AUTO_INCREMENT PRIMARY KEY,
    ticket_id   INT NOT NULL,
    sender_id   BIGINT NOT NULL,
    is_admin    TINYINT(1) DEFAULT 0,
    message     TEXT NOT NULL,
    created_at  TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- تنظیمات سیستم
CREATE TABLE IF NOT EXISTS settings (
    `key`       VARCHAR(100) PRIMARY KEY,
    `value`     TEXT,
    updated_at  TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- داده‌های پیش‌فرض
INSERT IGNORE INTO settings VALUES
('referral_bonus', '5000', NOW()),
('referral_percent', '0', NOW()),
('bot_status', 'active', NOW()),
('maintenance_msg', 'بات در حال تعمیر است. لطفاً بعداً تلاش کنید.', NOW());

-- پلن‌های نمونه
INSERT IGNORE INTO plans (name, traffic_gb, days, price, sort_order) VALUES
('برنزی 🥉', 10,  30,  50000, 1),
('نقره‌ای 🥈', 30,  30,  90000, 2),
('طلایی 🥇',  60,  30, 150000, 3),
('نامحدود ♾️',  0,  30, 200000, 4);
