-- ============================================================
-- كسبان (Kasban Ad Network) - ملف التركيب الشامل الموحد
-- يشمل إنشاء قاعدة البيانات، الجداول، المفهرسات، والبيانات الأولية
-- متوافق مع MySQL 5.7+ / MySQL 8.0+ / MariaDB / phpMyAdmin
-- ============================================================

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

SET FOREIGN_KEY_CHECKS = 0;

-- 1. جدول إعدادات النظام
DROP TABLE IF EXISTS `system_settings`;
CREATE TABLE `system_settings` (
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `setting_key` VARCHAR(100) NOT NULL UNIQUE,
    `setting_value` TEXT NULL,
    `description` VARCHAR(255) NULL,
    `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 2. جدول التصنيفات والمجالات
DROP TABLE IF EXISTS `categories`;
CREATE TABLE `categories` (
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `slug` VARCHAR(50) NOT NULL UNIQUE,
    `name_ar` VARCHAR(100) NOT NULL,
    `icon` VARCHAR(30) NOT NULL DEFAULT '📁',
    `status` ENUM('active', 'inactive') NOT NULL DEFAULT 'active'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 3. جدول المستخدمين
DROP TABLE IF EXISTS `payout_requests`;
DROP TABLE IF EXISTS `wallet_transactions`;
DROP TABLE IF EXISTS `ad_events`;
DROP TABLE IF EXISTS `campaigns`;
DROP TABLE IF EXISTS `ad_units`;
DROP TABLE IF EXISTS `websites`;
DROP TABLE IF EXISTS `users`;

CREATE TABLE `users` (
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `name` VARCHAR(100) NOT NULL,
    `email` VARCHAR(150) NOT NULL UNIQUE,
    `password` VARCHAR(255) NOT NULL,
    `role` ENUM('advertiser', 'publisher', 'admin') NOT NULL DEFAULT 'publisher',
    `wallet_balance` DECIMAL(12, 4) NOT NULL DEFAULT 0.0000,
    `currency` VARCHAR(10) NOT NULL DEFAULT 'USD',
    `phone` VARCHAR(30) NULL,
    `country` VARCHAR(50) NULL DEFAULT 'SA',
    `status` ENUM('active', 'suspended', 'pending') NOT NULL DEFAULT 'active',
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX `idx_email_role` (`email`, `role`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 4. جدول مواقع الناشرين
CREATE TABLE `websites` (
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `user_id` INT NOT NULL,
    `name` VARCHAR(150) NOT NULL,
    `domain` VARCHAR(200) NOT NULL,
    `category` VARCHAR(50) NOT NULL DEFAULT 'general',
    `monthly_visitors` INT NOT NULL DEFAULT 50000,
    `verification_code` VARCHAR(64) NOT NULL,
    `status` ENUM('approved', 'pending', 'rejected') NOT NULL DEFAULT 'approved',
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE,
    INDEX `idx_domain` (`domain`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 5. جدول الوحدات الإعلانية للناشر
CREATE TABLE `ad_units` (
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `website_id` INT NOT NULL,
    `unit_uid` VARCHAR(32) NOT NULL UNIQUE,
    `name` VARCHAR(120) NOT NULL,
    `format` ENUM('native_grid', 'banner_leaderboard', 'banner_rectangle') NOT NULL DEFAULT 'native_grid',
    `grid_columns` INT NOT NULL DEFAULT 4,
    `grid_rows` INT NOT NULL DEFAULT 2,
    `bg_color` VARCHAR(20) NOT NULL DEFAULT '#ffffff',
    `text_color` VARCHAR(20) NOT NULL DEFAULT '#0f172a',
    `accent_color` VARCHAR(20) NOT NULL DEFAULT '#059669',
    `border_style` VARCHAR(20) NOT NULL DEFAULT 'rounded',
    `status` ENUM('active', 'inactive') NOT NULL DEFAULT 'active',
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (`website_id`) REFERENCES `websites`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 6. جدول حملات المعلنين
CREATE TABLE `campaigns` (
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `user_id` INT NOT NULL,
    `title` VARCHAR(200) NOT NULL,
    `brand_name` VARCHAR(100) NOT NULL,
    `destination_url` TEXT NOT NULL,
    `image_url` TEXT NOT NULL,
    `format` ENUM('native', 'banner_leaderboard', 'banner_rectangle') NOT NULL DEFAULT 'native',
    `cpc_bid` DECIMAL(8, 4) NOT NULL DEFAULT 0.1500,
    `daily_budget` DECIMAL(10, 2) NOT NULL DEFAULT 50.00,
    `total_budget` DECIMAL(10, 2) NOT NULL DEFAULT 500.00,
    `spent_budget` DECIMAL(10, 4) NOT NULL DEFAULT 0.0000,
    `target_country` VARCHAR(10) NOT NULL DEFAULT 'ALL',
    `target_category` VARCHAR(50) NOT NULL DEFAULT 'ALL',
    `impressions_count` INT NOT NULL DEFAULT 0,
    `clicks_count` INT NOT NULL DEFAULT 0,
    `status` ENUM('active', 'paused', 'pending', 'completed') NOT NULL DEFAULT 'active',
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE,
    INDEX `idx_camp_status_bid` (`status`, `cpc_bid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 7. جدول أحداث الإعلانات والظهور والنقرات
CREATE TABLE `ad_events` (
    `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
    `campaign_id` INT NOT NULL,
    `ad_unit_id` INT NULL,
    `event_type` ENUM('impression', 'click') NOT NULL,
    `cpc_cost` DECIMAL(8, 4) NOT NULL DEFAULT 0.0000,
    `publisher_revenue` DECIMAL(8, 4) NOT NULL DEFAULT 0.0000,
    `platform_fee` DECIMAL(8, 4) NOT NULL DEFAULT 0.0000,
    `ip_address` VARCHAR(45) NOT NULL,
    `user_agent` TEXT NULL,
    `referrer` TEXT NULL,
    `is_valid` TINYINT(1) NOT NULL DEFAULT 1,
    `fraud_reason` VARCHAR(100) NULL,
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX `idx_campaign_event` (`campaign_id`, `event_type`),
    INDEX `idx_unit_event` (`ad_unit_id`, `event_type`),
    INDEX `idx_ip_created` (`ip_address`, `created_at`),
    INDEX `idx_created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 8. جدول المعاملات المالية للمحافظ
CREATE TABLE `wallet_transactions` (
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `user_id` INT NOT NULL,
    `type` ENUM('deposit', 'ad_spend', 'publisher_earning', 'payout', 'refund') NOT NULL,
    `amount` DECIMAL(12, 4) NOT NULL,
    `balance_after` DECIMAL(12, 4) NOT NULL,
    `description` VARCHAR(255) NOT NULL,
    `reference_id` VARCHAR(100) NULL,
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE,
    INDEX `idx_user_trans` (`user_id`, `created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 9. جدول طلبات السحب للناشرين
CREATE TABLE `payout_requests` (
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `user_id` INT NOT NULL,
    `amount` DECIMAL(10, 2) NOT NULL,
    `payout_method` VARCHAR(50) NOT NULL,
    `account_details` TEXT NOT NULL,
    `status` ENUM('pending', 'approved', 'rejected', 'paid') NOT NULL DEFAULT 'pending',
    `admin_note` TEXT NULL,
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    `processed_at` TIMESTAMP NULL,
    FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE,
    INDEX `idx_payout_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

SET FOREIGN_KEY_CHECKS = 1;

-- ============================================================
-- تحميل البيانات الأولية الجاهزة (Seed Data)
-- ============================================================

INSERT INTO `system_settings` (`setting_key`, `setting_value`, `description`) VALUES
('platform_name', 'كسبان', 'اسم شبكة الإعلانات'),
('platform_commission', '0.30', 'نسبة أرباح المنصة (30%)'),
('publisher_share', '0.70', 'نسبة أرباح الناشر (70%)'),
('min_payout_amount', '50.00', 'الحد الأدنى لطلب السحب بالدولار'),
('min_deposit_amount', '20.00', 'الحد الأدنى لشحن رصيد المعلن'),
('default_currency', 'USD', 'العملة الأساسية للحسابات'),
('currency_symbol', '$', 'رمز العملة'),
('anti_fraud_cooldown', '300', 'مدة حظر تكرار النقرة لنفس الـ IP بالثواني');

INSERT INTO `categories` (`slug`, `name_ar`, `icon`, `status`) VALUES
('tech', 'التقنية والبرمجيات', '💻', 'active'),
('business', 'المال والأعمال والاستثمار', '📈', 'active'),
('health', 'الصحة والأسرة والجمال', '🩺', 'active'),
('news', 'الأخبار والمقالات العامة', '📰', 'active'),
('automotive', 'السيارات والمركبات', '🚗', 'active'),
('education', 'التعليم والكورسات', '🎓', 'active'),
('ecommerce', 'التسوق والتجارة الإلكترونية', '🛍️', 'active');

INSERT INTO `users` (`id`, `name`, `email`, `password`, `role`, `wallet_balance`, `currency`, `phone`, `country`, `status`) VALUES
(1, 'سارة المنصور (معلن)', 'advertiser@kasban.net', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'advertiser', 485.5000, 'USD', '+966501112233', 'SA', 'active'),
(2, 'محمد الشريف (ناشر)', 'publisher@kasban.net', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'publisher', 342.8000, 'USD', '+201012345678', 'EG', 'active'),
(3, 'فريق إدارة كسبان', 'admin@kasban.net', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'admin', 1520.0000, 'USD', '+966509998877', 'SA', 'active');

INSERT INTO `websites` (`id`, `user_id`, `name`, `domain`, `category`, `monthly_visitors`, `verification_code`, `status`) VALUES
(1, 2, 'بوابة التقنية اليوم', 'tech-today.net', 'tech', 180000, 'ksb_verify_7f9a2b1c4d', 'approved'),
(2, 2, 'مجلة الصحة والأسرة', 'health-family.com', 'health', 95000, 'ksb_verify_3e8c1a9f0d', 'approved'),
(3, 2, 'سوق السيارات العربية', 'arab-motors.org', 'automotive', 65000, 'ksb_verify_9b2d4e6f1a', 'approved');

INSERT INTO `ad_units` (`id`, `website_id`, `unit_uid`, `name`, `format`, `grid_columns`, `grid_rows`, `bg_color`, `text_color`, `accent_color`, `border_style`, `status`) VALUES
(1, 1, 'ksb_unit_demo_native', 'شبكة محتوى مقترح أسفل المقال (4x2)', 'native_grid', 4, 2, '#ffffff', '#0f172a', '#059669', 'rounded', 'active'),
(2, 1, 'ksb_unit_demo_banner', 'بانر علوي متجاوب (728x90)', 'banner_leaderboard', 1, 1, '#f8fafc', '#0f172a', '#2563eb', 'flat', 'active'),
(3, 2, 'ksb_unit_demo_sidebar', 'بانر جانبي مربع (300x250)', 'banner_rectangle', 1, 1, '#ffffff', '#1e293b', '#d97706', 'rounded', 'active');

INSERT INTO `campaigns` (`id`, `user_id`, `title`, `brand_name`, `destination_url`, `image_url`, `format`, `cpc_bid`, `daily_budget`, `total_budget`, `spent_budget`, `target_country`, `target_category`, `impressions_count`, `clicks_count`, `status`) VALUES
(1, 1, 'دليلك الشامل لتعلم الذكاء الاصطناعي وهندسة الأوامر في 2027', 'أكاديمية المستقبل', 'https://example.com/ai-course?ref=kasban', 'https://images.unsplash.com/photo-1618005182384-a83a8bd57fbe?w=600&auto=format&fit=crop&q=80', 'native', 0.1800, 40.00, 300.00, 64.80, 'ALL', 'tech', 4520, 360, 'active'),
(2, 1, 'طريقة ذكية لحساب استهلاك الوقود وتوفير 30% من نفقات سيارتك', 'أوتو سيف للسيارات', 'https://example.com/fuel-saver?ref=kasban', 'https://images.unsplash.com/photo-1549399542-7e3f8b79c341?w=600&auto=format&fit=crop&q=80', 'native', 0.1400, 25.00, 200.00, 35.00, 'SA', 'automotive', 2890, 250, 'active'),
(3, 1, 'أفضل 7 منصات سحابية لإدارة المتاجر الإلكترونية للشركات الناشئة', 'سحابة كلاود إكس', 'https://example.com/cloud-commerce?ref=kasban', 'https://images.unsplash.com/photo-1551288049-bebda4e38f71?w=600&auto=format&fit=crop&q=80', 'native', 0.2200, 60.00, 500.00, 110.00, 'ALL', 'business', 6400, 500, 'active'),
(4, 1, 'عادات صباحية بسيطة أثبتت الدراسات فعاليتها في مضاعفة التركيز', 'صحة لايف', 'https://example.com/focus-habits?ref=kasban', 'https://images.unsplash.com/photo-1506126613408-eca07ce68773?w=600&auto=format&fit=crop&q=80', 'native', 0.1200, 20.00, 150.00, 28.80, 'ALL', 'health', 3120, 240, 'active'),
(5, 1, 'احصل على استشارة استثمارية مجانية لحماية رأس مالك من التضخم', 'مجموعة الأفق المالية', 'https://example.com/invest-advisor?ref=kasban', 'https://images.unsplash.com/photo-1590283603385-17ffb3a7f29f?w=600&auto=format&fit=crop&q=80', 'native', 0.3500, 100.00, 800.00, 182.00, 'SA', 'business', 4100, 520, 'active'),
(6, 1, 'سماعات احترافية بعزل صوتي ثوري وتجربة استماع سينمائية', 'ساوند برو ستور', 'https://example.com/pro-audio?ref=kasban', 'https://images.unsplash.com/photo-1505740420928-5e560c06d30e?w=600&auto=format&fit=crop&q=80', 'native', 0.1500, 30.00, 250.00, 42.00, 'ALL', 'tech', 3900, 280, 'active'),
(7, 1, 'تطبيق كسبان للإعلانات الرقمية - ضاعف مبيعاتك اليوم', 'شبكة كسبان', 'https://kasban.net', 'https://images.unsplash.com/photo-1460925895917-afdab827c52f?w=600&auto=format&fit=crop&q=80', 'banner_leaderboard', 0.2000, 50.00, 400.00, 54.00, 'ALL', 'general', 5200, 270, 'active'),
(8, 1, 'استضف متجرك على خوادم فائقة السرعة مع دعم عربي 24/7', 'هوست العرب', 'https://example.com/hosting?ref=kasban', 'https://images.unsplash.com/photo-1558494949-ef010cbdcc31?w=600&auto=format&fit=crop&q=80', 'banner_rectangle', 0.1600, 35.00, 300.00, 48.00, 'ALL', 'tech', 4300, 300, 'active');

INSERT INTO `wallet_transactions` (`user_id`, `type`, `amount`, `balance_after`, `description`, `reference_id`) VALUES
(1, 'deposit', 500.0000, 500.0000, 'شحن رصيد إعلاني بواسطة بطاقة بنكية', 'TXN_DEP_9921'),
(1, 'deposit', 150.0000, 650.0000, 'شحن رصيد إضافي', 'TXN_DEP_9945'),
(1, 'ad_spend', -164.5000, 485.5000, 'خصم تكلفة نقرات الحملات الإعلانية', 'TXN_SPEND_OCT'),
(2, 'publisher_earning', 280.0000, 280.0000, 'عائدات نقرات الزوار لشهر أكتوبر', 'TXN_PUB_OCT'),
(2, 'publisher_earning', 62.8000, 342.8000, 'عائدات الأسبوع الأول من نوفمبر', 'TXN_PUB_NOV_W1');

INSERT INTO `payout_requests` (`user_id`, `amount`, `payout_method`, `account_details`, `status`, `admin_note`) VALUES
(2, 150.00, 'Bank Transfer / تحويل بنكي', 'البنك الأهلي - IBAN: SA4410000001234567890123 - محمد الشريف', 'paid', 'تم التحويل بنجاح برقم إشعار TRF88219'),
(2, 100.00, 'Vodafone Cash / فودافون كاش', 'رقم المحفظة: 01012345678 - كاش مصر', 'pending', NULL);
