-- إعداد قاعدة البيانات والجداول
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+02:00";
SET FOREIGN_KEY_CHECKS = 0;

-- حذف الجداول إذا كانت موجودة مسبقاً لتفادي خطأ الإعادة
DROP TABLE IF EXISTS `file_uploads`;
DROP TABLE IF EXISTS `notifications`;
DROP TABLE IF EXISTS `banners`;
DROP TABLE IF EXISTS `prices`;
DROP TABLE IF EXISTS `products`;
DROP TABLE IF EXISTS `merchants`;
DROP TABLE IF EXISTS `users`;
DROP TABLE IF EXISTS `cities`;
DROP TABLE IF EXISTS `governorates`;

SET FOREIGN_KEY_CHECKS = 1;

-- جدول المحافظات
CREATE TABLE IF NOT EXISTS `governorates` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name_ar` VARCHAR(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- جدول المدن
CREATE TABLE IF NOT EXISTS `cities` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `governorate_id` INT NOT NULL,
  `name_ar` VARCHAR(100) NOT NULL,
  PRIMARY KEY (`id`),
  FOREIGN KEY (`governorate_id`) REFERENCES `governorates`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- جدول المستخدمين
CREATE TABLE IF NOT EXISTS `users` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(255) NOT NULL,
  `phone` VARCHAR(20) NOT NULL UNIQUE,
  `password` VARCHAR(255) NOT NULL,
  `role` ENUM('user', 'admin') DEFAULT 'user',
  `status` TINYINT(1) DEFAULT 1,
  `governorate_id` INT DEFAULT NULL,
  `city_id` INT DEFAULT NULL,
  `last_login` TIMESTAMP NULL DEFAULT NULL,
  `fcm_token` TEXT DEFAULT NULL,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  FOREIGN KEY (`governorate_id`) REFERENCES `governorates`(`id`) ON DELETE SET NULL,
  FOREIGN KEY (`city_id`) REFERENCES `cities`(`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- جدول التجار / المتاجر
CREATE TABLE IF NOT EXISTS `merchants` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(255) NOT NULL,
  `governorate_id` INT NOT NULL,
  `city_id` INT NOT NULL,
  `address` TEXT NOT NULL,
  `lat` DECIMAL(10, 8) DEFAULT NULL,
  `lng` DECIMAL(11, 8) DEFAULT NULL,
  `phone` VARCHAR(20) DEFAULT NULL,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  FOREIGN KEY (`governorate_id`) REFERENCES `governorates`(`id`) ON DELETE CASCADE,
  FOREIGN KEY (`city_id`) REFERENCES `cities`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- فهرس للإحداثيات لتسريع البحث المكاني
CREATE INDEX `idx_coordinates` ON `merchants` (`lat`, `lng`);

-- جدول المنتجات
CREATE TABLE IF NOT EXISTS `products` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(255) NOT NULL,
  `barcode` VARCHAR(100) NOT NULL UNIQUE,
  `category` VARCHAR(100) DEFAULT NULL,
  `image` VARCHAR(255) DEFAULT NULL,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- فهرس للباركود لتسريع البحث
CREATE INDEX `idx_barcode` ON `products` (`barcode`);

-- جدول الأسعار
CREATE TABLE IF NOT EXISTS `prices` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `product_id` INT NOT NULL,
  `merchant_id` INT NOT NULL,
  `price` DECIMAL(10, 2) NOT NULL,
  `updated_by` INT NOT NULL,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  FOREIGN KEY (`product_id`) REFERENCES `products`(`id`) ON DELETE CASCADE,
  FOREIGN KEY (`merchant_id`) REFERENCES `merchants`(`id`) ON DELETE CASCADE,
  FOREIGN KEY (`updated_by`) REFERENCES `users`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- جدول البنرات
CREATE TABLE IF NOT EXISTS `banners` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `image` VARCHAR(255) NOT NULL,
  `url` VARCHAR(255) DEFAULT NULL,
  `is_active` TINYINT(1) DEFAULT 1,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- جدول الإشعارات
CREATE TABLE IF NOT EXISTS `notifications` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `title` VARCHAR(255) NOT NULL,
  `body` TEXT NOT NULL,
  `user_id` INT DEFAULT NULL,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- جدول الملفات المرفوعة
CREATE TABLE IF NOT EXISTS `file_uploads` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `file_path` VARCHAR(255) NOT NULL,
  `file_type` VARCHAR(50) DEFAULT NULL,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- --------------------------------------------------------
-- إدخال البيانات الافتراضية
-- --------------------------------------------------------

-- المشرف الافتراضي
INSERT INTO `users` (`name`, `phone`, `password`, `role`) VALUES
('المدير العام', '01000000000', '$2y$10$FVJPuRNzMtwXs1jWYHWUCOwe9.I5wh.hez.MDDPgUt/novamrbhfm', 'admin'); 
-- كلمة المرور الافتراضية: 123456

-- المحافظات والمدن (27 محافظة مصرية مع أمثلة للمدن)
INSERT INTO `governorates` (`id`, `name_ar`) VALUES
(1, 'القاهرة'), (2, 'الجيزة'), (3, 'الإسكندرية'), (4, 'الدقهلية'), (5, 'البحر الأحمر'),
(6, 'البحيرة'), (7, 'الفيوم'), (8, 'الغربية'), (9, 'الإسماعيلية'), (10, 'المنوفية'),
(11, 'المنيا'), (12, 'القليوبية'), (13, 'الوادي الجديد'), (14, 'السويس'), (15, 'أسوان'),
(16, 'أس أسيوط'), (17, 'بني سويف'), (18, 'بورسعيد'), (19, 'دمياط'), (20, 'الشرقية'),
(21, 'جنوب سيناء'), (22, 'كفر الشيخ'), (23, 'مطروح'), (24, 'الأقصر'), (25, 'قنا'),
(26, 'شمال سيناء'), (27, 'سوهاج');

-- مدن محافظة القاهرة
INSERT INTO `cities` (`governorate_id`, `name_ar`) VALUES
(1, 'مدينة نصر'), (1, 'مصر الجديدة'), (1, 'المعادي'), (1, 'حلوان'), (1, 'القاهرة الجديدة');

-- مدن محافظة الجيزة
INSERT INTO `cities` (`governorate_id`, `name_ar`) VALUES
(2, 'الدقي'), (2, 'المهندسين'), (2, 'الهرم'), (2, '6 أكتوبر'), (2, 'الشيخ زايد');

-- مدن محافظة الإسكندرية
INSERT INTO `cities` (`governorate_id`, `name_ar`) VALUES
(3, 'المنتزه'), (3, 'سموحة'), (3, 'سيدي جابر'), (3, 'العجمي'), (3, 'برج العرب');

-- مدن محافظة الدقهلية
INSERT INTO `cities` (`governorate_id`, `name_ar`) VALUES
(4, 'المنصورة'), (4, 'ميت غمر'), (4, 'السنبلاوين'), (4, 'دكرنس');

-- مدن محافظة البحر الأحمر
INSERT INTO `cities` (`governorate_id`, `name_ar`) VALUES
(5, 'الغردقة'), (5, 'سفاجا'), (5, 'القصير'), (5, 'رأس غارب');

-- مدن محافظة البحيرة
INSERT INTO `cities` (`governorate_id`, `name_ar`) VALUES
(6, 'دمنهور'), (6, 'كفر الدوار'), (6, 'رشيد'), (6, 'إيتاي البارود');

-- مدن محافظة الفيوم
INSERT INTO `cities` (`governorate_id`, `name_ar`) VALUES
(7, 'الفيوم'), (7, 'سنورس'), (7, 'إطسا'), (7, 'طامية');

-- مدن محافظة الغربية
INSERT INTO `cities` (`governorate_id`, `name_ar`) VALUES
(8, 'طنطا'), (8, 'المحلة الكبرى'), (8, 'كفر الزيات'), (8, 'زفتى');

-- مدن محافظة الإسماعيلية
INSERT INTO `cities` (`governorate_id`, `name_ar`) VALUES
(9, 'الإسماعيلية'), (9, 'فايد'), (9, 'القنطرة شرق'), (9, 'القصاصين');

-- مدن محافظة المنوفية
INSERT INTO `cities` (`governorate_id`, `name_ar`) VALUES
(10, 'شبين الكوم'), (10, 'منوف'), (10, 'أشمون'), (10, 'السادات');

-- مدن محافظة المنيا
INSERT INTO `cities` (`governorate_id`, `name_ar`) VALUES
(11, 'المنيا'), (11, 'ملوي'), (11, 'بني مزار'), (11, 'مغاغة');

-- مدن محافظة القليوبية
INSERT INTO `cities` (`governorate_id`, `name_ar`) VALUES
(12, 'بنها'), (12, 'شبرا الخيمة'), (12, 'القناطر الخيرية'), (12, 'قليوب');

-- مدن محافظة الوادي الجديد
INSERT INTO `cities` (`governorate_id`, `name_ar`) VALUES
(13, 'الخارجة'), (13, 'الداخلة'), (13, 'الفرافرة'), (13, 'باريس');

-- مدن محافظة السويس
INSERT INTO `cities` (`governorate_id`, `name_ar`) VALUES
(14, 'السويس'), (14, 'الأربعين'), (14, 'الجناين'), (14, 'عتاقة');

-- مدن محافظة أسوان
INSERT INTO `cities` (`governorate_id`, `name_ar`) VALUES
(15, 'أسوان'), (15, 'كوم أمبو'), (15, 'إدفو'), (15, 'دراو');

-- مدن محافظة أسيوط
INSERT INTO `cities` (`governorate_id`, `name_ar`) VALUES
(16, 'أسيوط'), (16, 'ديروط'), (16, 'أبنوب'), (16, 'القوصية');

-- مدن محافظة بني سويف
INSERT INTO `cities` (`governorate_id`, `name_ar`) VALUES
(17, 'بني سويف'), (17, 'ببا'), (17, 'الواسطى'), (17, 'ناصر');

-- مدن محافظة بورسعيد
INSERT INTO `cities` (`governorate_id`, `name_ar`) VALUES
(18, 'بورسعيد'), (18, 'بورفؤاد'), (18, 'حي الشرق'), (18, 'الزهور');

-- مدن محافظة دمياط
INSERT INTO `cities` (`governorate_id`, `name_ar`) VALUES
(19, 'دمياط'), (19, 'رأس البر'), (19, 'دمياط الجديدة'), (19, 'فارسكور');

-- مدن محافظة الشرقية
INSERT INTO `cities` (`governorate_id`, `name_ar`) VALUES
(20, 'الزقازيق'), (20, 'العاشر من رمضان'), (20, 'منيا القمح'), (20, 'بلبيس');

-- مدن محافظة جنوب سيناء
INSERT INTO `cities` (`governorate_id`, `name_ar`) VALUES
(21, 'شرم الشيخ'), (21, 'الطور'), (21, 'دهب'), (21, 'نويبع');

-- مدن محافظة كفر الشيخ
INSERT INTO `cities` (`governorate_id`, `name_ar`) VALUES
(22, 'كفر الشيخ'), (22, 'دسوق'), (22, 'بلطيم'), (22, 'بيلا');

-- مدن محافظة مطروح
INSERT INTO `cities` (`governorate_id`, `name_ar`) VALUES
(23, 'مرسى مطروح'), (23, 'الحمام'), (23, 'العلمين'), (23, 'الضبعة');

-- مدن محافظة الأقصر
INSERT INTO `cities` (`governorate_id`, `name_ar`) VALUES
(24, 'الأقصر'), (24, 'إسنا'), (24, 'أرمنت'), (24, 'القرنة');

-- مدن محافظة قنا
INSERT INTO `cities` (`governorate_id`, `name_ar`) VALUES
(25, 'قنا'), (25, 'نجع حمادي'), (25, 'قوص'), (25, 'فرشوط');

-- مدن محافظة شمال سيناء
INSERT INTO `cities` (`governorate_id`, `name_ar`) VALUES
(26, 'العريش'), (26, 'بئر العبد'), (26, 'الشيخ زويد'), (26, 'رفح');

-- مدن محافظة سوهاج
INSERT INTO `cities` (`governorate_id`, `name_ar`) VALUES
(27, 'سوهاج'), (27, 'أخميم'), (27, 'جرجا'), (27, 'طهطا');

COMMIT;
