-- ============================================
-- دیتابیس ربات فروش کانفیگ V2Ray
-- ============================================

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(64) DEFAULT NULL,
    `first_name` VARCHAR(128) DEFAULT NULL,
    `last_name` VARCHAR(128) DEFAULT NULL,
    `language` ENUM('fa','ku') DEFAULT 'fa',
    `balance` BIGINT DEFAULT 0,                       -- موجودی به تومان
    `is_banned` TINYINT(1) DEFAULT 0,
    `is_admin` TINYINT(1) DEFAULT 0,
    `referrer_id` BIGINT DEFAULT NULL,
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX (`username`),
    INDEX (`is_admin`)
) ENGINE=InnoDB;

-- ادمین‌ها (چند ادمینی)
CREATE TABLE IF NOT EXISTS `admins` (
    `user_id` BIGINT PRIMARY KEY,
    `added_by` BIGINT DEFAULT NULL,
    `permissions` TEXT DEFAULT NULL,                  -- JSON: ["all"] یا لیست دسترسی‌ها
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;

-- دسته‌بندی محصولات
CREATE TABLE IF NOT EXISTS `categories` (
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `name_fa` VARCHAR(128) NOT NULL,
    `name_ku` VARCHAR(128) NOT NULL,
    `type` ENUM('config','panel') DEFAULT 'config',   -- کانفیگ حجمی یا پنل X-UI
    `sort_order` INT DEFAULT 0,
    `is_active` TINYINT(1) DEFAULT 1,
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;

-- محصولات (پلن‌ها)
CREATE TABLE IF NOT EXISTS `products` (
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `category_id` INT NOT NULL,
    `name_fa` VARCHAR(128) NOT NULL,
    `name_ku` VARCHAR(128) NOT NULL,
    `description_fa` TEXT,
    `description_ku` TEXT,
    `price` BIGINT NOT NULL,                          -- به تومان
    `volume_gb` INT DEFAULT 0,                        -- حجم به گیگ (۰ = نامحدود)
    `duration_days` INT DEFAULT 30,                   -- مدت اعتبار
    `is_active` TINYINT(1) DEFAULT 1,
    `sort_order` INT DEFAULT 0,
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (`category_id`) REFERENCES `categories`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB;

-- کانفیگ‌های آماده (دستی)
CREATE TABLE IF NOT EXISTS `ready_configs` (
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `product_id` INT DEFAULT NULL,                   -- اگر به پلن خاصی مربوط باشد
    `config_text` TEXT NOT NULL,                      -- متن کامل کانفیگ (vmess/vless/...)
    `remark` VARCHAR(128) DEFAULT NULL,              -- نام نمایشی
    `is_sold` TINYINT(1) DEFAULT 0,
    `sold_to` BIGINT DEFAULT NULL,
    `sold_at` DATETIME DEFAULT NULL,
    `created_by` BIGINT DEFAULT NULL,
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    INDEX (`is_sold`),
    INDEX (`product_id`)
) ENGINE=InnoDB;

-- سفارش‌ها
CREATE TABLE IF NOT EXISTS `orders` (
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `user_id` BIGINT NOT NULL,
    `product_id` INT DEFAULT NULL,
    `type` ENUM('config','panel','charge') NOT NULL,
    `amount` BIGINT NOT NULL,                         -- مبلغ پرداختی
    `status` ENUM('pending','waiting_payment','waiting_admin','paid','rejected','cancelled') DEFAULT 'pending',
    `payment_method` ENUM('wallet','card') DEFAULT 'wallet',
    `receipt_file_id` VARCHAR(255) DEFAULT NULL,     -- file_id عکس رسید
    `admin_note` TEXT DEFAULT NULL,
    `config_id` INT DEFAULT NULL,                     -- آی‌دی کانفیگ آماده یا ساخته‌شده
    `config_text` TEXT DEFAULT NULL,                  -- متن کانفیگ نهایی ارسال‌شده
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX (`user_id`),
    INDEX (`status`),
    INDEX (`created_at`)
) ENGINE=InnoDB;

-- تراکنش‌های کیف پول
CREATE TABLE IF NOT EXISTS `transactions` (
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `user_id` BIGINT NOT NULL,
    `amount` BIGINT NOT NULL,                         -- مثبت = واریز، منفی = برداشت
    `type` ENUM('charge','purchase','refund','admin') NOT NULL,
    `description` VARCHAR(255) DEFAULT NULL,
    `order_id` INT DEFAULT NULL,
    `admin_id` BIGINT DEFAULT NULL,
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    INDEX (`user_id`),
    INDEX (`created_at`)
) ENGINE=InnoDB;

-- کارت‌های بانکی
CREATE TABLE IF NOT EXISTS `cards` (
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `card_number` VARCHAR(20) NOT NULL,
    `owner_name` VARCHAR(128) NOT NULL,
    `bank_name` VARCHAR(64) DEFAULT NULL,
    `is_active` TINYINT(1) DEFAULT 1,
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;

-- چت ناشناس با ادمین
CREATE TABLE IF NOT EXISTS `chats` (
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `user_id` BIGINT NOT NULL,
    `admin_id` BIGINT DEFAULT NULL,                  -- ادمینی که پاسخ می‌دهد
    `status` ENUM('open','closed') DEFAULT 'open',
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX (`user_id`),
    INDEX (`status`)
) ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS `chat_messages` (
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `chat_id` INT NOT NULL,
    `sender_id` BIGINT NOT NULL,
    `is_admin` TINYINT(1) DEFAULT 0,
    `message_type` ENUM('text','photo','document') DEFAULT 'text',
    `content` TEXT,
    `file_id` VARCHAR(255) DEFAULT NULL,
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (`chat_id`) REFERENCES `chats`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB;

-- تنظیمات کلی ربات
CREATE TABLE IF NOT EXISTS `settings` (
    `key` VARCHAR(64) PRIMARY KEY,
    `value` TEXT,
    `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB;

-- لاگ فعالیت‌ها
CREATE TABLE IF NOT EXISTS `logs` (
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `user_id` BIGINT DEFAULT NULL,
    `action` VARCHAR(64) NOT NULL,
    `details` TEXT,
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
    INDEX (`created_at`)
) ENGINE=InnoDB;

-- درج ادمین اصلی
INSERT INTO `admins` (`user_id`, `permissions`) VALUES (6207384891, '["all"]')
ON DUPLICATE KEY UPDATE `permissions` = '["all"]';

INSERT INTO `users` (`id`, `first_name`, `is_admin`, `language`) VALUES (6207384891, 'Main Admin', 1, 'fa')
ON DUPLICATE KEY UPDATE `is_admin` = 1;

-- تنظیمات پیش‌فرض
INSERT INTO `settings` (`key`, `value`) VALUES
('welcome_fa', 'سلام! به ربات فروش کانفیگ خوش آمدید 🌟'),
('welcome_ku', 'سڵاو! بەخێربێیت بۆ ڕۆبۆتی فرۆشتنی کۆنفیگ 🌟'),
('support_text_fa', 'برای ارتباط با پشتیبانی از دکمه «ارتباط با ادمین» استفاده کنید.'),
('support_text_ku', 'بۆ پەیوەندی لەگەڵ پشتگیری دوگمەی «پەیوەندی لەگەڵ ئەدمین» بەکاربهێنە.')
ON DUPLICATE KEY UPDATE `value` = VALUES(`value`);
