-- ═══════════════════════════════════════════════════
-- SUDANNA AI OS v23 — Master Seed Data
-- Run AFTER master_schema.sql
-- ═══════════════════════════════════════════════════

SET NAMES 'utf8mb4';

-- From: activation.sql
INSERT IGNORE INTO subscription_plans
  (plan_key, name_ar, name_en, price_sdg, ai_requests_day, bookings_day, status)
VALUES
  ('free',  'مجاني',  'Free',  0,      20,  2,  'active'),
  ('plus',  'بلاس',   'Plus',  5000,   60,  5,  'active'),
  ('pro',   'برو',    'Pro',   10000,  200, 20,  'active');
INSERT IGNORE INTO feature_flags (flag_key, enabled, description)
VALUES
  ('telemedicine', 1, 'Telemedicine flow'),
  ('legal_flow',   1, 'Legal consultation flow'),
  ('business_flow',1, 'Business consulting flow'),
  ('academy',      1, 'Academy module'),
  ('marketplace',  1, 'Marketplace module'),
  ('bde',          1, 'Business document engine'),
  ('agent_api',    1, 'Developer agent API');
INSERT IGNORE INTO accounts (code, name, type) VALUES
  ('1001', 'نقدية وبنوك (Cash & Banks)',            'asset'),
  ('1002', 'محافظ المستخدمين (User Wallets)',        'asset'),
  ('2001', 'التزامات المستخدمين (User Liability)',   'liability'),
  ('2002', 'التزامات المزودين (Provider Liability)', 'liability'),
  ('3001', 'رأس المال (Equity)',                     'equity'),
  ('4001', 'إيرادات العمولات (Commission Revenue)',  'revenue'),
  ('4002', 'إيرادات الاشتراكات (Subscription Rev)', 'revenue'),
  ('5001', 'مصروفات البنك (Bank Fees)',              'expense');
INSERT IGNORE INTO kpi_daily (kpi_date) VALUES (CURDATE());

-- From: seed.sql
INSERT INTO exchange_rates (rate_usd_sdg, previous_rate, change_pct, source, note, is_active)
VALUES (4100.00, NULL, NULL, 'manual', 'سعر التأسيس الأولي', 1)
ON DUPLICATE KEY UPDATE id=id;
INSERT INTO platform_settings (setting_key, value, value_type, label_ar, category, unit) VALUES
-- Exchange
('usd_to_sdg_rate',            '4100',   'number',  'سعر صرف الدولار',                    'exchange',      'SDG'),
('rate_alert_threshold_pct',   '5',      'number',  'تنبيه عند تغيير بنسبة',               'exchange',      '%'),
('rate_auto_refresh',          '0',      'boolean', 'تحديث تلقائي للسعر',                  'exchange',      ''),
-- Subscription
('sub_free_price_sdg',         '0',      'number',  'سعر الخطة المجانية',                  'subscription',  'SDG'),
('sub_plus_base_usd',          '5.00',   'number',  'سعر Plus بالدولار',                   'subscription',  'USD'),
('sub_plus_price_sdg',         '20000',  'number',  'سعر Plus بالجنيه',                    'subscription',  'SDG'),
('sub_plus_override',          '1',      'boolean', 'استخدام سعر الجنيه مباشرة (Plus)',    'subscription',  ''),
('sub_pro_base_usd',           '12.20',  'number',  'سعر Pro بالدولار',                    'subscription',  'USD'),
('sub_pro_price_sdg',          '50000',  'number',  'سعر Pro بالجنيه',                     'subscription',  'SDG'),
('sub_pro_override',           '1',      'boolean', 'استخدام سعر الجنيه مباشرة (Pro)',     'subscription',  ''),
('credit_plus_sdg',            '15000',  'number',  'رصيد وثائق Plus الشهري',              'subscription',  'SDG'),
('credit_pro_sdg',             '50000',  'number',  'رصيد وثائق Pro الشهري',               'subscription',  'SDG'),
-- Corporate
('corp_starter_base_usd',      '99',     'number',  'Corporate Starter USD',               'corporate',     'USD'),
('corp_business_base_usd',     '249',    'number',  'Corporate Business USD',              'corporate',     'USD'),
('corp_scale_base_usd',        '599',    'number',  'Corporate Scale USD',                 'corporate',     'USD'),
('corp_user_extra_usd',        '3',      'number',  'مستخدم إضافي USD',                   'corporate',     'USD'),
-- Commission
('commission_rate',            '0.10',   'number',  'عمولة المنصة',                        'commission',    '%'),
('vat_rate',                   '0',      'number',  'ضريبة القيمة المضافة',                'commission',    '%'),
('annual_discount_pct',        '20',     'number',  'خصم العقد السنوي',                    'commission',    '%'),
('refund_window_days',         '7',      'number',  'فترة الاسترداد',                      'commission',    'days'),
-- Limits
('pay_limit_free_daily_sdg',   '20000',  'number',  'حد الدفع اليومي مجاني',              'limits',        'SDG'),
('pay_limit_plus_daily_sdg',   '200000', 'number',  'حد الدفع اليومي Plus',               'limits',        'SDG'),
('pay_limit_pro_daily_sdg',    '500000', 'number',  'حد الدفع اليومي Pro',                'limits',        'SDG'),
('pay_limit_monthly_sdg',      '1000000','number',  'الحد الشهري الكلي',                   'limits',        'SDG'),
('rate_limit_per_min',         '30',     'number',  'طلبات API في الدقيقة',               'limits',        'req'),
('partner_rate_limit_day',     '500',    'number',  'طلبات الشريك اليومية',               'limits',        'req')
ON DUPLICATE KEY UPDATE id=id;
INSERT INTO subscription_plans
  (plan_key, name, name_ar, name_en, price_sdg, price_usd,
   ai_limit, booking_limit, doc_credit_sdg, sdg_override, is_active)
VALUES
('free',  'مجاني',   'مجاني',          'Free',    0,      0.00,  20,  2,  0,      1, 1),
('plus',  'بلاس',    'بلاس',           'Plus',    20000,  5.00,  60,  5,  15000,  1, 1),
('pro',   'برو',     'برو',            'Pro',     50000,  12.20, 200, 20, 50000,  1, 1),
('corp',  'شركات',   'حلول الشركات',   'Corporate',0,    0.00,  0,   0,  0,      0, 1)
ON DUPLICATE KEY UPDATE id=id;
INSERT INTO document_prices
  (doc_type, label_ar, price_free_sdg, price_plus_sdg, price_pro_sdg, description_ar)
VALUES
('ai_chat',       'طلب AI إضافي',           500,   350,    0,   'يُطبَّق عند تجاوز الحد اليومي'),
('certificate',   'شهادة إتمام',           1000,   700,  500,   'شهادة إتمام دورة أو مهارة'),
('contract',      'عقد تجاري',             5000,  3500, 2000,   'عقد موردين، عملاء، شراكة'),
('proposal',      'عرض تجاري',             5000,  3500, 2000,   'عرض خدمات أو منتجات'),
('business_plan', 'خطة أعمال',            10000,  7500, 5000,   'خطة متكاملة للمشروع'),
('company_profile','ملف الشركة',           7000,  5000, 3500,   'Company Profile احترافي'),
('feasibility',   'دراسة جدوى',           15000, 11000, 8000,   'دراسة اقتصادية متكاملة'),
('legal_brief',   'مذكرة قانونية',         8000,  6000, 4000,   'مذكرة أو رأي قانوني'),
('translation',   'ترجمة وثيقة',           4000,  3000, 2000,   'ترجمة إنجليزي⟷عربي'),
('analysis',      'تقرير تحليلي',          7000,  5000, 3500,   'تحليل سوق أو بيانات')
ON DUPLICATE KEY UPDATE id=id;
INSERT INTO corporate_services_catalog
  (service_key, name_ar, name_en, category, base_price_usd, price_per_user_usd, setup_fee_usd, description_ar, sort_order)
VALUES
('medical_corp',    'رعاية صحية للموظفين',     'Employee Healthcare',       'medical',    150.00, 2.00,   0,    'حجوزات طبية + صيدلية + طوارئ للموظفين', 1),
('legal_monthly',   'استشارات قانونية شهرية',  'Monthly Legal Retainer',    'legal',      200.00, 0,      0,    'مراجعة عقود + استشارات on-demand', 2),
('bde_package',     'توثيق تجاري دوري',        'Business Documentation',    'bde',        100.00, 0,      0,    'عقود + عروض + تقارير شهرية', 3),
('training_corp',   'تدريب الموظفين',           'Employee Training',         'training',   120.00, 1.50,   0,    'أكاديمية + شهادات + تقييم', 4),
('api_integration', 'تكامل API',               'API Integration',           'api',        200.00, 0,      500,  'ربط أنظمة ERP/HR الحالية', 5),
('white_label',     'هوية مؤسسية مخصصة',       'White Label',               'white_label',400.00, 0,      1000, 'Custom domain + logo + colors', 6),
('sla_professional','SLA احترافي',              'Professional SLA',          'sla',        150.00, 0,      0,    '99.5% uptime + 4h response + dedicated manager', 7),
('sla_enterprise',  'SLA مؤسسي',               'Enterprise SLA',            'sla',        400.00, 0,      0,    '99.9% uptime + 1h response + on-site support', 8)
ON DUPLICATE KEY UPDATE id=id;
INSERT INTO staff_members (name, email, password_hash, role, active)
VALUES
('مدير النظام', 'admin@sudanna.ai', '$2b$12$pY.HLrgS4qfY4KAnQtodwOEDL5M3OwtJbusBKCVqlzi8etWMuNFKy', 'super_admin', 1)
ON DUPLICATE KEY UPDATE name = 'مدير النظام';
INSERT INTO bde_templates (name, type, language, is_active, variables, content) VALUES
('عقد خدمات عامة',      'contract',      'ar', 1,
 '["client_name","service_desc","duration","value_sdg","payment_terms"]',
 'قالب عقد خدمات بين طرفين — يشمل الأطراف، الخدمات، القيمة، شروط الدفع، الإنهاء'),
('عرض خدمات تجاري',    'proposal',      'ar', 1,
 '["company_name","client_name","services","total_value","validity_days"]',
 'قالب عرض تجاري احترافي — يشمل نظرة عامة، الخدمات المقترحة، التسعير، الجدول الزمني'),
('خطة أعمال',           'business_plan', 'ar', 1,
 '["project_name","sector","investment","timeline","target_market"]',
 'قالب خطة أعمال — يشمل الملخص التنفيذي، التحليل، الخدمات، التمويل، التوقعات المالية'),
('ملف شركة',            'company_profile','ar', 1,
 '["company_name","founded","employees","services","achievements"]',
 'قالب Company Profile — رؤية، رسالة، الخدمات، الإنجازات، فريق القيادة'),
('دراسة جدوى',          'feasibility',   'ar', 1,
 '["project_name","investment","market_size","timeline","roi_target"]',
 'قالب دراسة جدوى اقتصادية — تحليل السوق، التكاليف، العائد، المخاطر'),
('مذكرة قانونية',       'legal_brief',   'ar', 1,
 '["subject","parties","legal_basis","claim","recommendation"]',
 'قالب مذكرة قانونية — الموضوع، الأطراف، الأساس القانوني، التوصية'),
('تقرير تحليلي',        'analysis',      'ar', 1,
 '["topic","data_source","period","findings","recommendations"]',
 'قالب تقرير تحليلي — الموضوع، البيانات، النتائج، التوصيات')
ON DUPLICATE KEY UPDATE id=id;
INSERT IGNORE INTO neighborhood_zones (state_name, state_ar, state_code) VALUES
('Khartoum','الخرطوم','KH'),
('Omdurman','أم درمان','OD'),
('North Khartoum','شمال الخرطوم','NK'),
('Gezira','الجزيرة','GZ'),
('Kassala','كسلا','KS'),
('Gedaref','القضارف','GD'),
('River Nile','نهر النيل','RN'),
('Northern','الشمالية','NO'),
('Red Sea','البحر الأحمر','RS'),
('Blue Nile','النيل الأزرق','BN'),
('Sennar','سنار','SN'),
('White Nile','النيل الأبيض','WN'),
('North Kordofan','شمال كردفان','NK2'),
('South Kordofan','جنوب كردفان','SK'),
('West Kordofan','غرب كردفان','WK'),
('North Darfur','شمال دارفور','ND'),
('South Darfur','جنوب دارفور','SD'),
('West Darfur','غرب دارفور','WD');
INSERT INTO achievement_badges (badge_key, name_ar, name_en, icon, description, points) VALUES
('first_booking',   'أول حجز',         'First Booking',    '📅', 'أجريت أول حجز على المنصة',           50),
('ai_explorer',     'مستكشف الذكاء',   'AI Explorer',      '🤖', 'أرسلت 10 أسئلة للذكاء الاصطناعي',   30),
('idea_maker',      'صانع الأفكار',    'Idea Maker',       '💡', 'تم قبول اقتراحك من الإدارة',          200),
('community_star',  'نجم المجتمع',     'Community Star',   '⭐', 'نشرت 5 مشاركات في الحي',             50),
('doc_creator',     'موثِّق محترف',    'Doc Creator',      '📄', 'أصدرت 5 وثائق تجارية',               100),
('loyal_member',    'عضو وفي',         'Loyal Member',     '🏅', 'استخدمت المنصة 30 يوماً متتالية',     150),
('helper',          'مساعد الحي',      'Neighborhood Helper','🤝','رددت على 10 استفسارات في المجتمع',  80),
('top_voter',       'مُقيِّم نشط',    'Active Voter',     '🗳️', 'صوَّت على 20 اقتراح',                 40),
('implemented',     'فكرتي نُفِّذت',  'Implemented',      '🚀', 'تم تنفيذ اقتراحك على المنصة',        300),
('pro_user',        'مستخدم Pro',      'Pro User',         '💎', 'اشتركت في خطة Pro',                  100)
ON DUPLICATE KEY UPDATE id=id;
INSERT INTO neighborhood_zones (state_name, city_name, zone_code, is_active) VALUES
('الخرطوم','الخرطوم','KH-01',1),('الخرطوم','أم درمان','KH-02',1),
('الخرطوم','بحري','KH-03',1),('الجزيرة','ود مدني','JZ-01',1),
('نهر النيل','عطبرة','NN-01',1),('البحر الأحمر','بورتسودان','BA-01',1),
('الشمالية','دنقلا','SH-01',1),('كسلا','كسلا','KS-01',1),
('القضارف','القضارف','QD-01',1),('سنار','سنجة','SN-01',1),
('النيل الأبيض','ربك','NB-01',1),('النيل الأزرق','الدمازين','NZ-01',1),
('شمال دارفور','الفاشر','ND-01',1),('جنوب دارفور','نيالا','SD-01',1),
('غرب دارفور','الجنينة','WD-01',1),('شمال كردفان','الأبيض','NK-01',1),
('جنوب كردفان','كادقلي','SK-01',1),('غرب كردفان','الفولة','WK-01',1)
ON DUPLICATE KEY UPDATE id=id;
INSERT INTO provider_earnings_display
  (domain, city, avg_monthly_sdg, min_monthly_sdg, max_monthly_sdg,
   active_providers, demand_level, weekly_requests)
VALUES
('medical',    'الخرطوم',   42000, 20000,  80000, 47,  'critical', 412),
('legal',      'الخرطوم',   35000, 15000,  70000, 23,  'high',     187),
('education',  'الخرطوم',   28000, 12000,  55000, 89,  'high',     356),
('business',   'الخرطوم',   32000, 15000,  65000, 31,  'medium',   143),
('medical',    'ود مدني',   35000, 15000,  60000, 12,  'critical', 89),
('medical',    'بورتسودان', 38000, 18000,  65000, 8,   'critical', 67),
('education',  'ود مدني',   22000, 10000,  40000, 24,  'high',     112),
('craft',      'الخرطوم',   25000, 8000,   50000, 156, 'medium',   289),
('food',       'الخرطوم',   18000, 5000,   45000, 234, 'high',     678),
('beauty',     'الخرطوم',   20000, 8000,   40000, 178, 'high',     445)
ON DUPLICATE KEY UPDATE id=id;
INSERT INTO sdpay_bill_providers (code,name_ar,category,commission_pct,fixed_fee_sdg,is_active,sort_order) VALUES
('SEDC_KHT','شركة التوزيع الشمالية — الخرطوم','electricity',0.0030,0,1,1),
('SEDC_BAH','شركة التوزيع — بحري','electricity',0.0030,0,1,2),
('WATER_KHT','مياه الخرطوم','water',0.0025,0,1,3),
('ZAIN_SD','زين السودان — شحن الخط','telecom',0.0100,0,1,4),
('MTN_SD','MTN السودان — شحن الخط','telecom',0.0100,0,1,5),
('SUDANI','سوداني — شحن الخط','telecom',0.0100,0,1,6),
('ZAIN_POST','زين — فاتورة شهرية','telecom',0.0050,0,1,7),
('NET_KANAR','كانار نت','internet',0.0050,0,1,8)
ON DUPLICATE KEY UPDATE id=id;
INSERT INTO sdpay_gov_services (ministry_code,ministry_name,service_code,service_name_ar,fee_sdg,processing_days,is_active,sort_order) VALUES
('MOI','وزارة الداخلية','PASSPORT_NEW','استخراج جواز سفر جديد',15000,7,1,1),
('MOI','وزارة الداخلية','PASSPORT_RENEW','تجديد جواز السفر',10000,5,1,2),
('MOI','وزارة الداخلية','ID_NEW','استخراج بطاقة هوية وطنية',2000,3,1,3),
('MOTR','وزارة النقل','VEHICLE_LIC','تجديد رخصة السيارة',5000,1,1,4),
('MOTR','وزارة النقل','DRIVER_LIC','تجديد رخصة القيادة',3000,1,1,5),
('MOC','وزارة التجارة','COMMERCIAL_REG','تجديد السجل التجاري',8000,3,1,6),
('MOTA','وزارة التعليم','UNI_FEE','رسوم الجامعة السودانية',50000,1,1,7),
('MOHE','هيئة الزكاة','ZAKAT_PAY','إخراج الزكاة الإلكترونية',0,1,1,8)
ON DUPLICATE KEY UPDATE id=id;
INSERT INTO currency_rates (from_currency,to_currency,rate,valid_date,source) VALUES
('USD','SDG',4100.00,CURDATE(),'admin'),
('SAR','SDG',1093.00,CURDATE(),'admin'),
('AED','SDG',1116.00,CURDATE(),'admin'),
('GBP','SDG',5200.00,CURDATE(),'admin'),
('EGP','SDG',130.00,CURDATE(),'admin')
ON DUPLICATE KEY UPDATE id=id;

-- From: seed_data.sql
INSERT IGNORE INTO users (id, name, email, phone, user_type, provider_verified, created_at) VALUES
(100, 'د. أحمد محمد علي', 'dr.ahmed@sudanna.ai', '+249123456789', 'doctor', 1, NOW()),
(101, 'د. سارة عبدالله', 'dr.sara@sudanna.ai', '+249123456790', 'doctor', 1, NOW()),
(102, 'د. خالد عمر', 'dr.khaled@sudanna.ai', '+249123456791', 'doctor', 1, NOW()),
(103, 'أ. فاطمة محمد', 'lawyer.fatima@sudanna.ai', '+249123456792', 'lawyer', 1, NOW()),
(104, 'أ. عمر الأمين', 'lawyer.omar@sudanna.ai', '+249123456793', 'lawyer', 1, NOW()),
(105, 'م. نورا سالم', 'eng.nora@sudanna.ai', '+249123456794', 'service_provider', 1, NOW());
INSERT IGNORE INTO wallet (user_id, balance_sdg, kyc_level, status, created_at)
SELECT id, 0.00, 0, 'active', NOW() FROM users WHERE id NOT IN (SELECT user_id FROM wallet);
INSERT IGNORE INTO provider_services (provider_id, service_type, title_ar, price_sdg, available, created_at) VALUES
(100, 'medical', 'استشارة طبية عامة', 250.00, 1, NOW()),
(101, 'medical', 'طب الأطفال', 300.00, 1, NOW()),
(102, 'medical', 'طب الباطنية', 350.00, 1, NOW()),
(103, 'legal', 'قانون الأسرة والميراث', 500.00, 1, NOW()),
(104, 'legal', 'العقود التجارية', 800.00, 1, NOW()),
(105, 'engineering', 'استشارة هندسة مدنية', 600.00, 1, NOW());
INSERT IGNORE INTO feature_flags (flag_key, enabled, description) VALUES
('demo_mode', 1, 'Demo mode available'),
('trust_badges', 1, 'Show trust badges on payment screens'),
('fail_safe_ux', 1, 'Show fail-safe messages to users');

-- From: seed_pay.sql
INSERT IGNORE INTO sdpay_bill_providers (code,name_ar,name_en,category,commission_pct,fixed_fee_sdg,is_active) VALUES
('SEDC_KHT',   'شركة توزيع كهرباء الخرطوم',     'SEDC Khartoum',    'electricity', 0.0000, 500.00, 1),
('SEDC_NORTH',  'شركة توزيع كهرباء الشمالية',    'SEDC North',       'electricity', 0.0000, 500.00, 1),
('SEDC_EAST',   'شركة توزيع كهرباء الشرقية',     'SEDC East',        'electricity', 0.0000, 500.00, 1),
('SEDC_WEST',   'شركة توزيع كهرباء الغربية',     'SEDC West',        'electricity', 0.0000, 500.00, 1),
('SEDC_CENTRAL','شركة توزيع كهرباء الوسطى',     'SEDC Central',     'electricity', 0.0000, 500.00, 1);
INSERT IGNORE INTO sdpay_bill_providers (code,name_ar,name_en,category,commission_pct,fixed_fee_sdg,is_active) VALUES
('WATER_KHT',   'ولاية الخرطوم للمياه',         'Khartoum Water',   'water',       0.0000, 300.00, 1),
('WATER_NORTH', 'الولاية الشمالية للمياه',       'North Water',      'water',       0.0000, 300.00, 1);
INSERT IGNORE INTO sdpay_bill_providers (code,name_ar,name_en,category,commission_pct,fixed_fee_sdg,is_active) VALUES
('ZAIN_SD',    'زين السودان',                    'Zain Sudan',       'telecom',     0.0050, 0.00,   1),
('MTN_SD',     'MTN السودان',                    'MTN Sudan',        'telecom',     0.0050, 0.00,   1),
('SUDANI',     'سوداني',                         'Sudani',           'telecom',     0.0050, 0.00,   1),
('KANAR',      'كنار للاتصالات',                 'Canar Telecom',    'telecom',     0.0050, 0.00,   1);
INSERT IGNORE INTO sdpay_bill_providers (code,name_ar,name_en,category,commission_pct,fixed_fee_sdg,is_active) VALUES
('NHIF',       'الصندوق القومي للتأمين الصحي',   'NHIF',             'health',      0.0000, 0.00,   1),
('ZAKAT_SD',   'ديوان الزكاة — السودان',          'Zakat Diwan',      'other',       0.0000, 0.00,   1);
INSERT IGNORE INTO sdpay_gov_services (ministry,service_name_ar,service_code,fee_sdg,processing_days) VALUES
('وزارة الداخلية',    'استخراج جواز سفر جديد',         'PASSPORT_NEW',    15000.00, 7),
('وزارة الداخلية',    'تجديد جواز السفر',               'PASSPORT_RENEW',  10000.00, 5),
('وزارة الداخلية',    'تصريح الخروج والعودة',            'EXIT_VISA',        5000.00, 1),
('وزارة التجارة',     'تسجيل سجل تجاري',               'TRADE_REG',       20000.00, 3),
('وزارة التجارة',     'تجديد السجل التجاري',             'TRADE_RENEW',      8000.00, 1),
('وزارة المالية',     'دفع ضريبة القيمة المضافة',        'VAT_PAYMENT',          0.00, 1),
('وزارة المالية',     'دفع ضريبة الدخل',                'INCOME_TAX',           0.00, 1),
('وزارة النقل',       'ترخيص مركبة — إصدار',            'VEH_LICENSE_NEW', 12000.00, 2),
('وزارة النقل',       'تجديد ترخيص مركبة',              'VEH_LICENSE_RENEW', 5000.00, 1),
('وزارة النقل',       'استخراج رخصة قيادة',             'DRV_LICENSE',     10000.00, 3),
('وزارة التعليم العالي','رسوم الجامعات الحكومية',        'UNIV_FEES',            0.00, 1),
('وزارة الصحة',       'رسوم المستشفيات الحكومية',        'HOSPITAL_FEES',        0.00, 1),
('وزارة العدل',       'توثيق العقود والمستندات',         'NOTARY_FEE',       3000.00, 1),
('وزارة العمل',       'تصاريح العمل الأجنبي',           'WORK_PERMIT',     25000.00, 5),
('هيئة الزكاة',      'إخراج الزكاة الإلكتروني',         'ZAKAT',                0.00, 1);
INSERT IGNORE INTO sdpay_currency_rates (from_currency,to_currency,rate,source,valid_date) VALUES
('USD','SDG',4100.00,'manual',CURDATE()),
('SAR','SDG',1093.00,'manual',CURDATE()),
('AED','SDG',1116.00,'manual',CURDATE()),
('EUR','SDG',4450.00,'manual',CURDATE()),
('GBP','SDG',5200.00,'manual',CURDATE()),
('EGP','SDG', 130.00,'manual',CURDATE()),
('ETB','SDG',  72.00,'manual',CURDATE());

-- From: migration_v23_pricing.sql
INSERT IGNORE INTO image_prices (size_key, label_ar, base_cost_usd, price_free_sdg, price_plus_sdg, price_pro_sdg, provider) VALUES
('512x512',   'صورة صغيرة 512×512',  0.020, 1500,  1000,  500,  'gemini'),
('1024x1024', 'صورة كبيرة 1024×1024', 0.040, 3000,  2000, 1200, 'gemini'),
('1024x1792', 'صورة طويلة 1024×1792', 0.080, 5000,  3500, 2000, 'gemini');
INSERT IGNORE INTO video_prices (duration_key, label_ar, base_cost_usd, price_free_sdg, price_plus_sdg, price_pro_sdg, provider) VALUES
('5s',  'فيديو 5 ثوانٍ',  0.50,  15000, 10000,  6000, 'veo'),
('15s', 'فيديو 15 ثانية', 1.50,  40000, 28000, 18000, 'veo'),
('30s', 'فيديو 30 ثانية', 3.00,  75000, 52000, 35000, 'veo'),
('60s', 'فيديو دقيقة',    6.00, 145000,100000, 70000, 'veo');
INSERT INTO platform_settings (setting_key, value, value_type, label_ar, category, unit) VALUES
('ai_daily_limit_free', '20',  'number', 'حد AI اليومي — مجاني',  'subscription', 'requests'),
('ai_daily_limit_plus', '60',  'number', 'حد AI اليومي — Plus',   'subscription', 'requests'),
('ai_daily_limit_pro',  '200', 'number', 'حد AI اليومي — Pro',    'subscription', 'requests'),
('ai_daily_limit_corp', '500', 'number', 'حد AI اليومي — Corp',   'subscription', 'requests'),
('booking_limit_free',  '2',   'number', 'حد الحجوزات — مجاني',    'subscription', 'bookings'),
('booking_limit_plus',  '5',   'number', 'حد الحجوزات — Plus',     'subscription', 'bookings'),
('booking_limit_pro',   '20',  'number', 'حد الحجوزات — Pro',      'subscription', 'bookings'),
('booking_limit_corp',  '100', 'number', 'حد الحجوزات — Corp',     'subscription', 'bookings'),
('ai_overage_charge_sdg', '500', 'number', 'سعر السؤال الإضافي', 'subscription', 'SDG'),
('ai_warn_threshold_pct', '80',  'number', 'تنبيه عند نسبة استخدام', 'limits', '%')
ON DUPLICATE KEY UPDATE value=VALUES(value);
INSERT INTO platform_settings (setting_key, value, value_type, label_ar, category, unit) VALUES
('credit_low_threshold_pct', '20', 'number', 'تنبيه عند نفاد رصيد الوثائق', 'limits', '%'),
('credit_critical_threshold_pct', '5', 'number', 'تحذير حرج لرصيد الوثائق', 'limits', '%')
ON DUPLICATE KEY UPDATE value=VALUES(value);

-- From: migration_v23_estimator.sql
INSERT INTO platform_settings (setting_key, value, value_type, label_ar, category, unit)
VALUES
  ('estimation_rate_limit_min',        '10',    'number', 'حد estimation في الدقيقة', 'estimation', 'requests'),
  ('estimation_daily_cap_user',        '50',    'number', 'حد estimation اليومي للمستخدم', 'estimation', 'requests'),
  ('estimation_global_budget_usd_day', '1.00',  'number', 'ميزانية estimation اليومية للمنصة', 'estimation', 'USD'),
  ('estimation_threshold_sdg',         '3000',  'number', 'حد التقدير الإجباري (SDG)', 'estimation', 'SDG'),
  ('estimation_ttl_minutes',           '30',    'number', 'مدة صلاحية الـ reservation', 'estimation', 'minutes'),
  ('max_active_reservations',          '3',     'number', 'أقصى reservations نشطة للمستخدم', 'estimation', 'count'),
  ('estimation_ai_confidence_min',     '0.70',  'number', 'حد الـ confidence لتفعيل AI analyzer', 'estimation', 'ratio'),
  ('overage_tolerance_pct_free',       '3',     'number', 'هامش overage للمجاني', 'estimation', '%'),
  ('overage_tolerance_pct_plus',       '7',     'number', 'هامش overage لـ Plus', 'estimation', '%'),
  ('overage_tolerance_pct_pro',        '10',    'number', 'هامش overage لـ Pro', 'estimation', '%'),
  ('overage_tolerance_pct_corp',       '15',    'number', 'هامش overage للشركات', 'estimation', '%'),
  ('estimation_hard_stop_overage',     '1',     'boolean','إيقاف عند تجاوز الهامش', 'estimation', 'bool'),
  ('adaptive_feedback_enabled',        '1',     'boolean','تفعيل الـ feedback loop الأسبوعي', 'estimation', 'bool')
ON DUPLICATE KEY UPDATE value=VALUES(value);
INSERT INTO platform_settings (setting_key, value, value_type, label_ar, category, unit)
VALUES
  ('enable_image_generation', '0', 'boolean', 'تفعيل توليد الصور (Gemini Vision)', 'features', 'bool'),
  ('enable_video_generation', '0', 'boolean', 'تفعيل توليد الفيديو (Veo)', 'features', 'bool'),
  ('enable_diagram_generation', '0', 'boolean', 'تفعيل توليد الرسومات', 'features', 'bool')
ON DUPLICATE KEY UPDATE value=VALUES(value);
INSERT INTO platform_settings (setting_key, value, value_type, label_ar, category, unit) VALUES ('enable_consultation_booking', '0', 'boolean', 'تفعيل حجز الاستشارات (Beta)', 'features', 'bool') ON DUPLICATE KEY UPDATE value=VALUES(value);
INSERT INTO platform_settings (setting_key, value, value_type, label_ar, category, unit) VALUES ('subscription_price_sdg', '10000', 'number', 'سعر الاشتراك الشهري (SDG)', 'pricing', 'SDG') ON DUPLICATE KEY UPDATE value=VALUES(value);


-- ─────────────────────────────────────────────────────────
-- Config Consolidation: PHP Constants → platform_settings
-- Step 3: Single Source of Truth for pricing + limits
-- ─────────────────────────────────────────────────────────
INSERT INTO platform_settings
  (setting_key, value, value_type, label_ar, category)
VALUES
  ('ai_daily_limit_free', '20', 'number', 'حد AI اليومي — مجاني', 'subscription'),
  ('ai_daily_limit_plus', '60', 'number', 'حد AI اليومي — Plus', 'subscription'),
  ('ai_daily_limit_pro', '200', 'number', 'حد AI اليومي — Pro', 'subscription'),
  ('ai_daily_limit_paid', '100', 'number', 'حد AI اليومي — Paid', 'subscription'),
  ('ai_daily_limit_guest', '5', 'number', 'حد AI اليومي — زوار', 'subscription'),
  ('booking_daily_limit_free', '2', 'number', 'حد الحجوزات — مجاني', 'subscription'),
  ('booking_daily_limit_plus', '5', 'number', 'حد الحجوزات — Plus', 'subscription'),
  ('booking_daily_limit_pro', '20', 'number', 'حد الحجوزات — Pro', 'subscription'),
  ('subscription_price_sdg', '10000', 'number', 'سعر الاشتراك الشهري (SDG)', 'pricing'),
  ('sub_plus_price_sdg', '20000', 'number', 'سعر Plus (SDG)', 'pricing'),
  ('sub_pro_price_sdg', '50000', 'number', 'سعر Pro (SDG)', 'pricing'),
  ('sub_plus_credit_sdg', '15000', 'number', 'رصيد Plus الشهري (SDG)', 'pricing'),
  ('sub_pro_credit_sdg', '50000', 'number', 'رصيد Pro الشهري (SDG)', 'pricing'),
  ('exchange_rate_usd_sdg', '4100', 'number', 'سعر صرف USD/SDG', 'pricing'),
  ('pay_commission_rate', '0.1', 'number', 'عمولة المنصة', 'payments'),
  ('pay_agent_rate', '0.01', 'number', 'عمولة الوكيل', 'payments'),
  ('pay_daily_limit_free', '5000', 'number', 'حد التحويل اليومي — مجاني', 'payments'),
  ('pay_daily_limit_plus', '50000', 'number', 'حد التحويل اليومي — Plus', 'payments'),
  ('pay_monthly_limit', '200000', 'number', 'الحد الشهري للتحويل', 'payments'),
  ('sdpay_max_transfer_sdg', '10000000', 'number', 'الحد الأقصى للتحويل — SdPay', 'sdpay'),
  ('sdpay_min_transfer_sdg', '10', 'number', 'الحد الأدنى للتحويل — SdPay', 'sdpay'),
  ('sdpay_aml_threshold_sdg', '10000000', 'number', 'حد AML (SDG)', 'sdpay'),
  ('sdpay_agent_commission', '0.005', 'number', 'عمولة الوكيل — SdPay', 'sdpay'),
  ('sdpay_merchant_commission_default', '0.015', 'number', 'عمولة التاجر الافتراضية', 'sdpay'),
  ('sdpay_enabled', 'true', 'boolean', 'تفعيل SdPay', 'features'),
  ('bank_integration_enabled', 'filter_var(getenv('BANK_INTEGRATION_ENABLED', 'boolean', 'تفعيل تكامل البنك', 'features'),
  ('sandbox_mode', 'true', 'boolean', 'وضع الاختبار (Sandbox)', 'features'),
  ('partner_rate_limit_day', '500', 'number', 'حد طلبات الشركاء اليومي', 'limits'),
  ('rate_limit_per_min', '30', 'number', 'حد الطلبات في الدقيقة', 'limits')
ON DUPLICATE KEY UPDATE value=VALUES(value);

-- Topup idempotency: prevent double-charging same payment_ref
ALTER TABLE wallet_transactions
  ADD INDEX IF NOT EXISTS idx_topup_ref (user_id, ref_type, created_at);
-- Note: full UNIQUE on (user_id, description) would be too broad
-- Application-level check handles this with 7-day window

-- ═══════════════════════════════════════════════════
-- FIX A: Topup Idempotency — DB-level enforcement
-- Add payment_ref column + UNIQUE constraint
-- ═══════════════════════════════════════════════════
ALTER TABLE wallet_transactions
  ADD COLUMN IF NOT EXISTS payment_ref VARCHAR(100) NULL
    COMMENT 'bank transfer ref for idempotency',
  ADD UNIQUE INDEX IF NOT EXISTS idx_topup_idempotent
    (user_id, payment_ref, ref_type);

-- ═══════════════════════════════════════════════════════════════
-- FIX: bank_webhooks DB-level idempotency
-- Adds UNIQUE constraint on bank_txn_id to prevent double-processing
-- ═══════════════════════════════════════════════════════════════
ALTER TABLE bank_webhooks
  DROP INDEX IF EXISTS idx_bank_txn,
  ADD UNIQUE INDEX idx_bank_txn (bank_txn_id)
    COMMENT 'DB-enforced idempotency — INSERT fails on duplicate txn_id';

-- ─── Phase 6: Rule scoring support ───────────────────────────────────────────
-- Add rule_id tracking to ai_requests (uses existing 'intent' VARCHAR(100))
-- We store ie_rule_id in the intent field prefixed with 'rule:'
-- Alter: add dedicated column for cleaner queries
ALTER TABLE ai_requests
  ADD COLUMN ie_rule_id VARCHAR(80) NULL AFTER intent,
  ADD INDEX idx_rule_id (ie_rule_id);

-- Rule performance summary table (populated by IERuleScoringEngine)
CREATE TABLE IF NOT EXISTS ie_rule_scores (
    id           INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    rule_id      VARCHAR(80)  NOT NULL,
    sector       VARCHAR(50)  NOT NULL,
    total_hits   INT UNSIGNED DEFAULT 0,
    success_hits INT UNSIGNED DEFAULT 0,
    error_hits   INT UNSIGNED DEFAULT 0,
    avg_latency_ms INT UNSIGNED DEFAULT 0,
    avg_confidence DECIMAL(4,3) DEFAULT 0,
    cost_saved_usd DECIMAL(10,6) DEFAULT 0,
    score        DECIMAL(5,2) DEFAULT 0,
    grade        ENUM('STRONG','GOOD','WEAK','BAD','UNSCORED') DEFAULT 'UNSCORED',
    never_fired  TINYINT(1)   DEFAULT 0,
    always_overridden TINYINT(1) DEFAULT 0,
    last_seen    DATETIME NULL,
    scored_at    DATETIME DEFAULT CURRENT_TIMESTAMP,
    UNIQUE KEY uk_rule (rule_id),
    INDEX idx_score (score),
    INDEX idx_grade (grade)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


-- ─── Phase 7: Rule Lifecycle System ──────────────────────────────────────────

-- Rule lifecycle state machine
CREATE TABLE IF NOT EXISTS ie_rule_lifecycle (
    id              INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    rule_id         VARCHAR(80)  NOT NULL,
    sector          VARCHAR(50)  NOT NULL,
    state           ENUM('ACTIVE','MONITORED','DEPRECATED','PENDING_REMOVAL','REMOVED')
                    NOT NULL DEFAULT 'ACTIVE',
    score           DECIMAL(5,2) NOT NULL DEFAULT 0,
    prev_state      ENUM('ACTIVE','MONITORED','DEPRECATED','PENDING_REMOVAL','REMOVED') NULL,
    state_reason    VARCHAR(255) NULL,          -- why state changed
    confidence_orig DECIMAL(4,3) NULL,          -- original rule confidence
    confidence_cur  DECIMAL(4,3) NULL,          -- current (may be reduced if DEPRECATED)
    consecutive_weak_periods INT UNSIGNED DEFAULT 0,  -- periods below threshold
    monitoring_started DATETIME NULL,           -- when entered MONITORED
    deprecated_at   DATETIME NULL,
    removal_requested_at DATETIME NULL,
    removal_approved_by  VARCHAR(100) NULL,     -- manual approval required
    removal_approved_at  DATETIME NULL,
    is_core_rule    TINYINT(1) DEFAULT 0,       -- pay/emergency → never auto-deprecate
    created_at      DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at      DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY uk_rule_id (rule_id),
    INDEX idx_state  (state),
    INDEX idx_score  (score),
    INDEX idx_sector (sector)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Score history for trend analysis
CREATE TABLE IF NOT EXISTS ie_rule_score_history (
    id          INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    rule_id     VARCHAR(80)  NOT NULL,
    score       DECIMAL(5,2) NOT NULL,
    grade       ENUM('STRONG','GOOD','WEAK','BAD') NOT NULL,
    total_hits  INT UNSIGNED DEFAULT 0,
    error_rate  DECIMAL(5,2) DEFAULT 0,
    avg_latency_ms INT UNSIGNED DEFAULT 0,
    period_days INT UNSIGNED DEFAULT 7,
    recorded_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_rule_id   (rule_id),
    INDEX idx_recorded  (recorded_at),
    INDEX idx_rule_date (rule_id, recorded_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Manual removal approvals audit
CREATE TABLE IF NOT EXISTS ie_rule_removal_log (
    id           INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    rule_id      VARCHAR(80)  NOT NULL,
    sector       VARCHAR(50)  NOT NULL,
    score_at_request DECIMAL(5,2) NULL,
    requested_by VARCHAR(100) NULL,
    requested_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    approved_by  VARCHAR(100) NULL,
    approved_at  DATETIME NULL,
    rejected_by  VARCHAR(100) NULL,
    rejected_at  DATETIME NULL,
    notes        TEXT NULL,
    INDEX idx_rule_id (rule_id),
    INDEX idx_requested (requested_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

