-- ====================================================
-- FarazPing - ساختار دیتابیس (فاز ۱)
-- این فایل رو از cPanel > phpMyAdmin روی دیتابیسی که
-- ساختی Import کن.
-- ====================================================

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) NULL,
    first_name VARCHAR(128) NULL,
    wallet_balance BIGINT NOT NULL DEFAULT 0,       -- به تومان
    referred_by INT NULL,                            -- id کاربر دعوت‌کننده
    used_trial TINYINT(1) NOT NULL DEFAULT 0,        -- آیا تست رایگان استفاده کرده
    is_banned TINYINT(1) NOT NULL DEFAULT 0,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (referred_by) REFERENCES users(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- مدیرها (مالک + ادمین‌ها)
CREATE TABLE IF NOT EXISTS admins (
    id INT AUTO_INCREMENT PRIMARY KEY,
    telegram_id BIGINT UNSIGNED NOT NULL UNIQUE,
    role ENUM('owner','admin') NOT NULL DEFAULT 'admin',
    permissions JSON NULL,     -- {"plans":true,"tickets":true,...}
    added_by BIGINT UNSIGNED NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- پنل‌های پاسارگاد (برای فاز چندپنلی بعدی هم آماده‌ست)
CREATE TABLE IF NOT EXISTS panels (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(64) NOT NULL,
    api_url VARCHAR(255) NOT NULL,
    api_key VARCHAR(255) NOT NULL,
    is_active TINYINT(1) NOT NULL DEFAULT 1,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- پلن‌های فروش
CREATE TABLE IF NOT EXISTS plans (
    id INT AUTO_INCREMENT PRIMARY KEY,
    panel_id INT NOT NULL,
    title VARCHAR(128) NOT NULL,
    description TEXT NULL,
    price BIGINT NOT NULL,           -- تومان
    volume_gb INT NOT NULL,
    duration_days INT NOT NULL,
    device_limit INT NOT NULL DEFAULT 1,
    user_limit INT NOT NULL DEFAULT 1,
    is_featured TINYINT(1) NOT NULL DEFAULT 0,
    is_active TINYINT(1) NOT NULL DEFAULT 1,
    sort_order INT NOT NULL DEFAULT 0,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (panel_id) REFERENCES panels(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- سرویس‌های خریداری‌شده (پنل‌های ساخته‌شده برای کاربر)
CREATE TABLE IF NOT EXISTS orders (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    plan_id INT NULL,
    panel_id INT NOT NULL,
    panel_username VARCHAR(64) NOT NULL,
    panel_password VARCHAR(64) NOT NULL,
    is_trial TINYINT(1) NOT NULL DEFAULT 0,
    price_paid BIGINT NOT NULL DEFAULT 0,
    expires_at DATETIME NOT NULL,
    status ENUM('active','expired','disabled') NOT NULL DEFAULT 'active',
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
    FOREIGN KEY (plan_id) REFERENCES plans(id) ON DELETE SET NULL,
    FOREIGN KEY (panel_id) REFERENCES panels(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- تراکنش‌های کیف پول (شارژ، خرید، هدیه و ...)
CREATE TABLE IF NOT EXISTS transactions (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    type ENUM('charge_gateway','charge_card','purchase','renewal','admin_gift','gift_code') NOT NULL,
    amount BIGINT NOT NULL,          -- مثبت = واریز، منفی = برداشت
    balance_after BIGINT NOT NULL,
    description VARCHAR(255) NULL,
    status ENUM('pending','approved','rejected') NOT NULL DEFAULT 'approved',
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- رسیدهای کارت‌به‌کارت (در انتظار تایید ادمین)
CREATE TABLE IF NOT EXISTS card_receipts (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    amount BIGINT NOT NULL,
    photo_file_id VARCHAR(255) NOT NULL,   -- file_id عکس رسید در تلگرام
    status ENUM('pending','approved','rejected') NOT NULL DEFAULT 'pending',
    reviewed_by BIGINT UNSIGNED NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- کد تخفیف
CREATE TABLE IF NOT EXISTS discount_codes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    code VARCHAR(32) NOT NULL UNIQUE,
    type ENUM('percent','fixed') NOT NULL,
    value BIGINT NOT NULL,               -- درصد یا مبلغ ثابت
    max_uses INT NULL,                   -- NULL = نامحدود
    used_count INT NOT NULL DEFAULT 0,
    is_active TINYINT(1) NOT NULL DEFAULT 1,
    expires_at DATETIME NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- کد هدیه (شارژ مستقیم کیف پول)
CREATE TABLE IF NOT EXISTS gift_codes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    code VARCHAR(32) NOT NULL UNIQUE,
    amount BIGINT NOT NULL,
    max_uses INT NULL,
    used_count INT NOT NULL DEFAULT 0,
    is_active TINYINT(1) NOT NULL DEFAULT 1,
    expires_at DATETIME NULL,
    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,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS ticket_messages (
    id INT AUTO_INCREMENT PRIMARY KEY,
    ticket_id INT NOT NULL,
    sender ENUM('user','admin') NOT NULL,
    message TEXT NOT NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (ticket_id) REFERENCES tickets(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- سوالات متداول
CREATE TABLE IF NOT EXISTS faqs (
    id INT AUTO_INCREMENT PRIMARY KEY,
    question VARCHAR(255) NOT NULL,
    answer TEXT NOT NULL,
    sort_order INT NOT NULL DEFAULT 0,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- تنظیمات کلی بات (key-value، از پنل ادمین قابل تغییر)
CREATE TABLE IF NOT EXISTS settings (
    setting_key VARCHAR(64) PRIMARY KEY,
    setting_value TEXT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO settings (setting_key, setting_value) VALUES
    ('welcome_text', 'به ربات FarazPing خوش آمدید! 🚀'),
    ('trial_volume_gb', '1'),
    ('trial_duration_days', '1'),
    ('referral_reward', '10000'),
    ('card_number', 'REPLACE_WITH_CARD_NUMBER'),
    ('card_holder', 'REPLACE_WITH_NAME')
ON DUPLICATE KEY UPDATE setting_key = setting_key;

-- وضعیت مکالمه‌ی کاربر (برای مراحل چندقدمی مثل ساخت پلن یا خرید)
CREATE TABLE IF NOT EXISTS user_states (
    telegram_id BIGINT UNSIGNED PRIMARY KEY,
    state VARCHAR(64) NOT NULL,
    data JSON NULL,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
