-- ============================================
-- سیستم مدیریت نمایندگان 3x-ui
-- فایل SQL کامل و واحد برای نصب دیتابیس
-- ============================================
-- 
-- نحوه استفاده:
-- 1. در cPanel یک دیتابیس MySQL ایجاد کنید
-- 2. این فایل را در phpMyAdmin import کنید
-- 3. پس از import، فایل setup.php یا fix_password.php را اجرا کنید
--
-- اطلاعات ورود پیش‌فرض:
-- نام کاربری: admin
-- رمز عبور: admin123
-- ⚠️ پس از اولین ورود، رمز عبور را تغییر دهید!
-- ============================================
-- این فایل شامل تمام جداول و قابلیت‌های سیستم است:
-- - مدیریت پنل‌های 3x-ui
-- - مدیریت نمایندگان با محدودیت ترافیک و تاریخ
-- - مدیریت کاربران نمایندگان
-- - مدیریت inbound های مجاز
-- - لاگ فعالیت‌های نمایندگان
-- ============================================

-- جدول پنل‌ها
CREATE TABLE IF NOT EXISTS `panels` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `url` varchar(500) NOT NULL,
  `username` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `proxy_type` varchar(20) DEFAULT NULL COMMENT 'نوع proxy: socks5',
  `proxy_host` varchar(255) DEFAULT NULL COMMENT 'آدرس proxy',
  `proxy_port` int(11) DEFAULT NULL COMMENT 'پورت proxy',
  `proxy_username` varchar(255) DEFAULT NULL COMMENT 'نام کاربری proxy',
  `proxy_password` varchar(255) DEFAULT NULL COMMENT 'رمز عبور proxy',
  `use_proxy` tinyint(1) DEFAULT 0 COMMENT 'استفاده از proxy در صورت خطا',
  `subscription_base_url` varchar(500) DEFAULT NULL COMMENT 'آدرس پایه برای لینک subscription (مثلاً https://sub.example.com)',
  `status` varchar(20) DEFAULT 'active',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- محدودیت هر اینباند در سطح پنل (حداکثر کاربر کل روی هر اینباند)
CREATE TABLE IF NOT EXISTS `panel_inbounds` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `panel_id` int(11) NOT NULL,
  `inbound_id` int(11) NOT NULL COMMENT 'ID اینباند در پنل 3x-ui',
  `user_limit` int(11) NOT NULL DEFAULT 0 COMMENT 'حداکثر کاربر کل روی این اینباند، 0=نامحدود',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `unique_panel_inbound` (`panel_id`, `inbound_id`),
  KEY `panel_id` (`panel_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- جدول نمایندگان
CREATE TABLE IF NOT EXISTS `representatives` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(100) NOT NULL,
  `password` varchar(255) NOT NULL,
  `full_name` varchar(255) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `phone` varchar(20) DEFAULT NULL,
  `telegram_id` varchar(100) DEFAULT NULL,
  `whatsapp_number` varchar(20) DEFAULT NULL,
  `panel_id` int(11) NOT NULL,
  `traffic_limit` bigint(20) DEFAULT 0 COMMENT 'حد ترافیک کل نماینده (بایت)',
  `used_traffic` bigint(20) DEFAULT 0 COMMENT 'ترافیک مصرف شده نماینده (بایت)',
  `expiry_date` datetime DEFAULT NULL COMMENT 'تاریخ انقضای دسترسی نماینده',
  `last_activity` datetime DEFAULT NULL COMMENT 'آخرین زمان فعالیت نماینده',
  `wallet_balance` decimal(12,2) NOT NULL DEFAULT 0.00 COMMENT 'موجودی کیف پول',
  `default_remark` varchar(255) DEFAULT NULL COMMENT 'ریمارک پیش‌فرض در ساخت کاربر',
  `price_per_gb` decimal(12,2) NOT NULL DEFAULT 0.00 COMMENT 'قیمت هر گیگ (0=حساب نشود)',
  `price_per_day` decimal(12,2) NOT NULL DEFAULT 0.00 COMMENT 'قیمت هر روز اعتبار (0=حساب نشود)',
  `discount_percent` tinyint(3) NOT NULL DEFAULT 0 COMMENT 'تخفیف درصدی برای این نماینده (0-100)، 0=استفاده از تخفیف سراسری',
  `status` varchar(20) DEFAULT 'active',
  `rank` int(11) DEFAULT NULL COMMENT 'رتبه نماینده (۱=بالاترین، ۲، ۳، ...) — NULL=بدون رتبه',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`),
  KEY `panel_id` (`panel_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- جدول کاربران نمایندگان
CREATE TABLE IF NOT EXISTS `reseller_users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `representative_id` int(11) NOT NULL,
  `panel_id` int(11) NOT NULL,
  `xray_user_id` varchar(255) DEFAULT NULL COMMENT 'UUID کاربر در پنل',
  `sub_id` varchar(64) DEFAULT NULL COMMENT 'شناسه subscription کلاینت در پنل 3x-ui',
  `inbound_id` int(11) DEFAULT NULL,
  `email` varchar(255) NOT NULL,
  `remark` varchar(255) DEFAULT NULL,
  `total_traffic` bigint(20) DEFAULT 0 COMMENT 'ترافیک کل مصرف شده (بایت)',
  `traffic_limit` bigint(20) DEFAULT 0 COMMENT 'حد ترافیک (بایت)',
  `expiry_date` datetime DEFAULT NULL,
  `status` varchar(20) DEFAULT 'active',
  `check_token` varchar(64) DEFAULT NULL COMMENT 'کد یکتا برای استعلام وضعیت توسط کاربر (ربات تلگرام یا لینک)',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `check_token` (`check_token`),
  KEY `representative_id` (`representative_id`),
  KEY `panel_id` (`panel_id`),
  KEY `email` (`email`),
  KEY `status` (`status`),
  KEY `expiry_date` (`expiry_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- جدول ادمین
CREATE TABLE IF NOT EXISTS `admins` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(100) NOT NULL,
  `password` varchar(255) NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- جدول inbound های مجاز برای هر نماینده (هر نماینده می‌تواند اینباند از چند پنل/سرور داشته باشد)
CREATE TABLE IF NOT EXISTS `representative_inbounds` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `representative_id` int(11) NOT NULL,
  `panel_id` int(11) NOT NULL COMMENT 'پنل این اینباند',
  `inbound_id` int(11) NOT NULL COMMENT 'ID inbound در پنل 3x-ui',
  `inbound_name` varchar(255) DEFAULT NULL COMMENT 'نام inbound برای نمایش',
  `user_limit` int(11) NOT NULL DEFAULT 0 COMMENT 'حداکثر کاربر برای این اینباند، 0=نامحدود',
  `status` varchar(20) DEFAULT 'active',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `representative_id` (`representative_id`),
  KEY `panel_id` (`panel_id`),
  UNIQUE KEY `unique_rep_panel_inbound` (`representative_id`, `panel_id`, `inbound_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- جدول تراکنش‌های کیف پول نمایندگان
CREATE TABLE IF NOT EXISTS `wallet_transactions` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `representative_id` int(11) NOT NULL,
  `amount` decimal(12,2) NOT NULL COMMENT 'مثبت=واریز، منفی=برداشت',
  `type` varchar(50) NOT NULL DEFAULT 'create_user',
  `ref_id` int(11) DEFAULT NULL,
  `description` varchar(255) DEFAULT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `representative_id` (`representative_id`),
  KEY `created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- جدول لاگ فعالیت‌های نمایندگان
CREATE TABLE IF NOT EXISTS `representative_logs` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `representative_id` int(11) NOT NULL,
  `action` varchar(100) NOT NULL COMMENT 'نوع عمل: create_user, update_user, delete_user',
  `user_id` int(11) DEFAULT NULL COMMENT 'ID کاربر در reseller_users',
  `details` text DEFAULT NULL COMMENT 'جزئیات عمل',
  `ip_address` varchar(45) DEFAULT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `representative_id` (`representative_id`),
  KEY `created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- جدول تیکت‌های نمایندگان
CREATE TABLE IF NOT EXISTS `tickets` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `representative_id` int(11) NOT NULL,
  `subject` varchar(255) NOT NULL,
  `status` varchar(20) NOT NULL DEFAULT 'open' COMMENT 'open, answered, closed',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `representative_id` (`representative_id`),
  KEY `status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- پیام‌های هر تیکت
CREATE TABLE IF NOT EXISTS `ticket_messages` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ticket_id` int(11) NOT NULL,
  `sender_type` varchar(20) NOT NULL COMMENT 'representative یا admin',
  `sender_id` int(11) DEFAULT NULL COMMENT 'id ادمین یا نماینده',
  `message` text NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `ticket_id` (`ticket_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- اعلانات / پیام / تبلیغ / جشواره برای نمایندگان (مدیر ثبت می‌کند)
CREATE TABLE IF NOT EXISTS `announcements` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `content` text NOT NULL,
  `type` varchar(30) NOT NULL DEFAULT 'message' COMMENT 'message, ad, contest',
  `active` tinyint(1) NOT NULL DEFAULT 1,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `expires_at` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `active` (`active`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- تنظیمات سراسری (قیمت‌گذاری و محدودیت پیش‌فرض اینباند)
CREATE TABLE IF NOT EXISTS `settings` (
  `name` varchar(100) NOT NULL,
  `value` text,
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `settings` (`name`, `value`) VALUES
  ('wallet_price_per_config', '1000'),
  ('wallet_price_per_gb', '0'),
  ('wallet_price_per_day', '0'),
  ('default_inbound_user_limit', '0'),
  ('default_discount_percent', '0'),
  ('telegram_bot_token', '')
ON DUPLICATE KEY UPDATE `name`=`name`;

-- ایجاد ادمین پیش‌فرض
-- نام کاربری: admin
-- رمز عبور: admin123
-- ⚠️ توجه: پس از import، فایل setup.php یا fix_password.php را اجرا کنید
-- تا رمز عبور با SALT صحیح در config.php به‌روزرسانی شود
INSERT INTO `admins` (`username`, `password`) VALUES 
('admin', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi')
ON DUPLICATE KEY UPDATE `username`=`username`;

-- ============================================
-- پایان فایل SQL
-- ============================================
