﻿-- داده‌های ضروری و پایه سیستم
-- این فایل پس از 001_initial_schema.sql اجرا شود.

-- یکتا بودن شماره موبایل کاربران در دیتابیس موجود
SET @user_mobile_index_exists := (
    SELECT COUNT(*)
    FROM information_schema.statistics
    WHERE table_schema = DATABASE()
      AND table_name = 'users'
      AND index_name = 'uq_user_mobile'
);
SET @user_mobile_index_sql := IF(
    @user_mobile_index_exists = 0,
    'ALTER TABLE users ADD UNIQUE KEY uq_user_mobile (mobile)',
    'SELECT 1'
);
PREPARE user_mobile_index_stmt FROM @user_mobile_index_sql;
EXECUTE user_mobile_index_stmt;
DEALLOCATE PREPARE user_mobile_index_stmt;

-- ساختار ناوگان و ناحیه زون‌ها برای دیتابیس‌های قدیمی
SET @zone_area_column_exists := (
    SELECT COUNT(*)
    FROM information_schema.columns
    WHERE table_schema = DATABASE()
      AND table_name = 'zones'
      AND column_name = 'area_name'
);
SET @zone_area_column_sql := IF(
    @zone_area_column_exists = 0,
    'ALTER TABLE zones ADD COLUMN area_name VARCHAR(150) NULL COMMENT ''ناحیه / محدوده زون'' AFTER name',
    'SELECT 1'
);
PREPARE zone_area_column_stmt FROM @zone_area_column_sql;
EXECUTE zone_area_column_stmt;
DEALLOCATE PREPARE zone_area_column_stmt;

CREATE TABLE IF NOT EXISTS `vehicles` (
    `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `vehicle_code` VARCHAR(50) NOT NULL,
    `vehicle_type` VARCHAR(80) NOT NULL,
    `plate_number` VARCHAR(30) NOT NULL,
    `model_year` SMALLINT UNSIGNED NULL,
    `color` VARCHAR(50) NULL,
    `ownership_type` ENUM('company', 'personal') NOT NULL DEFAULT 'company',
    `owner_name` VARCHAR(150) NULL,
    `owner_mobile` VARCHAR(20) NULL,
    `status` ENUM('active', 'inactive', 'maintenance') NOT NULL DEFAULT 'active',
    `notes` VARCHAR(500) NULL,
    `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `updated_at` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY `uq_vehicle_code` (`vehicle_code`),
    UNIQUE KEY `uq_vehicle_plate` (`plate_number`),
    INDEX `idx_vehicles_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_persian_ci;

CREATE TABLE IF NOT EXISTS `vehicle_driver_assignments` (
    `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `vehicle_id` BIGINT UNSIGNED NOT NULL,
    `driver_id` BIGINT UNSIGNED NOT NULL,
    `assigned_from` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `assigned_to` DATETIME NULL,
    `status` ENUM('active', 'ended') NOT NULL DEFAULT 'active',
    `notes` VARCHAR(255) NULL,
    `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT `fk_vehicle_driver_assignments_vehicle`
        FOREIGN KEY (`vehicle_id`) REFERENCES `vehicles`(`id`) ON DELETE CASCADE,
    CONSTRAINT `fk_vehicle_driver_assignments_driver`
        FOREIGN KEY (`driver_id`) REFERENCES `users`(`id`) ON DELETE RESTRICT,
    INDEX `idx_vehicle_driver_assignments_vehicle` (`vehicle_id`, `assigned_from`),
    INDEX `idx_vehicle_driver_assignments_driver` (`driver_id`, `assigned_from`),
    INDEX `idx_vehicle_driver_assignments_active` (`vehicle_id`, `status`, `assigned_to`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_persian_ci;

CREATE TABLE IF NOT EXISTS `zone_vehicle_assignments` (
    `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `zone_id` INT NOT NULL,
    `vehicle_id` BIGINT UNSIGNED NOT NULL,
    `assigned_from` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `assigned_to` DATETIME NULL,
    `status` ENUM('active', 'ended') NOT NULL DEFAULT 'active',
    `notes` VARCHAR(255) NULL,
    `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT `fk_zone_vehicle_assignments_zone`
        FOREIGN KEY (`zone_id`) REFERENCES `zones`(`id`) ON DELETE CASCADE,
    CONSTRAINT `fk_zone_vehicle_assignments_vehicle`
        FOREIGN KEY (`vehicle_id`) REFERENCES `vehicles`(`id`) ON DELETE RESTRICT,
    INDEX `idx_zone_vehicle_assignments_zone` (`zone_id`, `assigned_from`),
    INDEX `idx_zone_vehicle_assignments_vehicle` (`vehicle_id`, `assigned_from`),
    INDEX `idx_zone_vehicle_assignments_active` (`vehicle_id`, `status`, `assigned_to`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_persian_ci;

-- استان‌ها و شهرهای پایه
INSERT IGNORE INTO provinces_list (id, name, ordered) VALUES
(25, 'گیلان', 100),
(27, 'مازندران', 99);




INSERT IGNORE INTO provinces_cities (id, prov_id, name, ordered) VALUES
(991, 25, 'آستارا', 0),
(992, 25, 'لوندویل', 0),
(993, 25, 'آستانه اشرفیه', 46),
(994, 25, 'کیاشهر', 46),
(995, 25, 'املش', 0),
(996, 25, 'رانکوه', 0),
(997, 25, 'بندرانزلی', 43),
(998, 25, 'خشکبیجار', 0),
(999, 25, 'خمام', 0),
(1000, 25, 'رشت', 45),
(1001, 25, 'سنگر', 0),
(1002, 25, 'کوچصفهان', 0),
(1003, 25, 'لشت نشاء', 0),
(1004, 25, 'لولمان', 0),
(1005, 25, 'پره سر', 0),
(1006, 25, 'رضوانشهر', 0),
(1007, 25, 'بره سر', 0),
(1008, 25, 'توتکابن', 0),
(1009, 25, 'جیرنده', 0),
(1010, 25, 'رستم آباد', 0),
(1011, 25, 'رودبار', 0),
(1012, 25, 'لوشان', 0),
(1013, 25, 'منجیل', 0),
(1014, 25, 'چابکسر', 0),
(1015, 25, 'رحیم آباد', 0),
(1016, 25, 'رودسر', 0),
(1017, 25, 'کلاچای', 0),
(1018, 25, 'واجارگاه', 0),
(1019, 25, 'دیلمان', 0),
(1020, 25, 'سیاهکل', 48),
(1021, 25, 'احمدسرگوراب', 0),
(1022, 25, 'شفت', 0),
(1023, 25, 'صومعه سرا', 0),
(1024, 25, 'گوراب زرمیخ', 0),
(1025, 25, 'مرجقل', 0),
(1026, 25, 'اسالم', 0),
(1027, 25, 'چوبر', 0),
(1028, 25, 'حویق', 0),
(1029, 25, 'لیسار', 0),
(1030, 25, 'هشتپر (تالش)', 0),
(1031, 25, 'فومن', 0),
(1032, 25, 'ماسوله', 0),
(1033, 25, 'ماکلوان', 0),
(1034, 25, 'رودبنه', 0),
(1035, 25, 'لاهیجان', 50),
(1036, 25, 'اطاقور', 0),
(1037, 25, 'چاف و چمخاله', 0),
(1038, 25, 'شلمان', 0),
(1039, 25, 'کومله', 0),
(1040, 25, 'لنگرود', 49),
(1041, 25, 'بازار جمعه', 0),
(1042, 25, 'ماسال', 0),
(1068, 27, 'آمل', 0),
(1069, 27, 'امامزاده عبدالله', 0),
(1070, 27, 'دابودشت', 0),
(1071, 27, 'رینه', 0),
(1072, 27, 'گزنک', 0),
(1073, 27, 'امیرکلا', 0),
(1074, 27, 'بابل', 0),
(1075, 27, 'خوش رودپی', 0),
(1076, 27, 'زرگرمحله', 0),
(1077, 27, 'گتاب', 0),
(1078, 27, 'گلوگاه', 0),
(1079, 27, 'مرزیکلا', 0),
(1080, 27, 'بابلسر', 0),
(1081, 27, 'بهنمیر', 0),
(1082, 27, 'هادی شهر', 0),
(1083, 27, 'بهشهر', 0),
(1084, 27, 'خلیل شهر', 0),
(1085, 27, 'رستمکلا', 0),
(1086, 27, 'تنکابن', 0),
(1087, 27, 'خرم آباد', 0),
(1088, 27, 'شیرود', 0),
(1089, 27, 'نشتارود', 0),
(1090, 27, 'جویبار', 0),
(1091, 27, 'کوهی خیل', 0),
(1092, 27, 'چالوس', 0),
(1093, 27, 'مرزن آباد', 0),
(1094, 27, 'هچیرود', 0),
(1095, 27, 'رامسر', 50),
(1096, 27, 'کتالم وسادات شهر', 0),
(1097, 27, 'پایین هولار', 0),
(1098, 27, 'ساری', 0),
(1099, 27, 'فریم', 0),
(1100, 27, 'کیاسر', 0),
(1101, 27, 'آلاشت', 0),
(1102, 27, 'پل سفید', 0),
(1103, 27, 'زیرآب', 0),
(1104, 27, 'شیرگاه', 0),
(1105, 27, 'کیاکلا', 0),
(1106, 27, 'سلمان شهر', 0),
(1107, 27, 'عباس اباد', 0),
(1108, 27, 'کلارآباد', 0),
(1109, 27, 'فریدونکنار', 0),
(1110, 27, 'ارطه', 0),
(1111, 27, 'قایم شهر', 0),
(1112, 27, 'کلاردشت', 0),
(1114, 27, 'سرخرود', 0),
(1115, 27, 'محمودآباد', 0),
(1116, 27, 'سورک', 0),
(1117, 27, 'نکا', 0),
(1118, 27, 'ایزدشهر', 0),
(1119, 27, 'بلده', 0),
(1120, 27, 'چمستان', 0),
(1121, 27, 'رویان', 0),
(1122, 27, 'نور', 0),
(1123, 27, 'پول', 0),
(1124, 27, 'کجور', 0),
(1125, 27, 'نوشهر', 0);

-- کاربر ادمین، نقش‌ها، مجوزهای پایه و دسته‌های مشتری
-- درج اطلاعات پایه‌ای دسته‌بندی‌ها
INSERT IGNORE INTO `customers_cat` (`id`, `name`, `descri`, `status`, `soft_deleted`) VALUES
(1, 'عمومی', '', 1, 0),
(2, 'ویژه', '', 1, 0),
(3, 'تستی', '', 1, 0);
 
-- درج کاربر ادمین سیستم
INSERT IGNORE INTO users (id, username, password, full_name, mobile, email, status) 
VALUES 
('1', 'admin', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'امین سروش', '09115980717', 'amins01411@gmail.com', 'active');

-- اصلاح مقادیر id و slug تکراری نقش‌ها
INSERT IGNORE INTO roles (id, name, slug, description) 
VALUES 
('1', 'مدیر سیستم', 'superadmin', 'دسترسی کامل برای مدیر سیستم'),
('2', 'کارشناس سیستم', 'system_expert', ''),
('3', 'ناظر', 'supervisor', ''),
('4', 'حسابدار', 'accountant', ''),
('5', 'کمک حسابدار', 'assistant_accountant', ''),
('6', 'انباردار', 'warehouse_keeper', ''),
('7', 'بازاریاب', 'visitor', ''),
('8', 'راننده', 'driver', '');

-- انتساب نقش به کاربر 
INSERT IGNORE INTO user_roles (user_id, role_id) 
VALUES 
('1', '1');

-- درج دسترسی‌ها
INSERT IGNORE INTO permissions (id, name, slug, description)
VALUES
('1', 'ورود به سیستم', 'panel.login', 'دسترسی ورود به سیستم'),
('2', 'مشاهده داشبورد', 'dashboard.view', ''),
('3', 'لاگ ها - مشاهده', 'logs.view', ''),
('4', 'ماژول مشتریان', 'customers.modules', 'امکان مشاهده بخش مشتریان'),
('5', 'ساخت مشتری جدید', 'customers.add', 'امکان ساخت مشتری جدید'),
('6', 'ویرایش مشتری', 'customers.edit', 'امکان ویرایش مشتری'),
('7', 'حذف مشتری', 'customers.delete', ''),
('8', 'لیست کامل مشتریان', 'customers.fulllist', 'امکان مشاهده لیست کامل مشتریان'),
('9', 'مشاهده پروفایل مشتری', 'customers.profile', ''),
('10', 'بخش دسته بندی مشتریان', 'customers.category', ''),
('11', 'ساخت دسته بندی جدید مشتریان', 'customers.category.new', ''),
('12', 'ویرایش دسته بندی مشتریان', 'customers.category.edit', ''),
('13', 'حذف دسته بندی مشتریان', 'customers.category.delete', ''),
('14', 'مشاهده لاگ تغییرات ویزیتور مشتریان', 'customers.visitor.assignments.log.view', 'امکان مشاهده لاگ تغییرات ویزیتور مشتریان');

-- انتساب دسترسی‌ها به نقش مدیر سیستم
INSERT IGNORE INTO role_permissions (role_id, permission_id) 
VALUES 
('1', '1'), ('1', '2'), ('1', '3'), ('1', '4'), ('1', '5'), ('1', '6'), 
('1', '7'), ('1', '8'), ('1', '9'), ('1', '10'), ('1', '11'), ('1', '12'), ('1', '13'),('1', '14');

-- مجوزهای جزئی و دسترسی پنل بازاریاب
-- تفکیک دسترسی‌های فرم ویرایش مشتری و دسترسی‌های CRM

INSERT IGNORE INTO `permissions` (`name`, `slug`, `description`) VALUES
('ویرایش اطلاعات عمومی مشتری', 'customers.edit.general', 'ویرایش نام، دسته‌بندی و اطلاعات عمومی مشتری'),
('ویرایش اطلاعات تماس مشتری', 'customers.edit.contact', 'ویرایش شماره‌های تماس و رمز ورود مشتری'),
('ویرایش اطلاعات مکانی مشتری', 'customers.edit.location', 'ویرایش استان، شهر، آدرس و مختصات مشتری'),
('ویرایش اطلاعات مالی و توزیع مشتری', 'customers.edit.sales', 'ویرایش اطلاعات مالی و فروش مشتری'),
('ویرایش تخصیص بازاریاب مشتری', 'customers.edit.assignment', 'تغییر بازاریاب مسئول مشتری'),
('ویرایش وضعیت CRM مشتری', 'customers.edit.crm', 'تغییر وضعیت چرخه عمر و وضعیت دسترسی مشتری'),
('مشاهده تاریخچه وضعیت CRM', 'customers.crm.history.view', 'مشاهده سوابق تغییر وضعیت CRM و دلیل تغییر'),
('مشاهده پیگیری‌های مشتری', 'customers.followups.view', 'مشاهده پیگیری‌ها و فعالیت‌های مشتری'),
('مشاهده فعالیت‌های مشتری', 'customers.activities.view', 'مشاهده تماس‌ها، ویزیت‌ها و فعالیت‌های ثبت‌شده مشتری'),
('مدیریت پیگیری‌های مشتری', 'customers.followups.manage', 'ثبت، انجام و لغو پیگیری‌های مشتری'),
('انجام یا لغو پیگیری دیگران', 'customers.followups.others.manage', 'انجام یا لغو پیگیری‌هایی که به کاربر دیگری اختصاص داده شده‌اند'),
('مشاهده بخش حسابداری مشتری', 'customers.accounting.view', 'مشاهده شناسه حسابداری مشتری'),
('ویرایش شناسه حسابداری مشتری', 'customers.accounting.edit', 'ویرایش شناسه حسابداری مشتری'),
('تست اتصال حسابداری مشتری', 'customers.accounting.test', 'اجرای تست اتصال شناسه حسابداری مشتری'),
('مشاهده بخش فروش مشتری', 'customers.sales.view', 'مشاهده رتبه‌بندی و شرایط مالی مشتری'),
('ویرایش بخش فروش مشتری', 'customers.sales.edit', 'ویرایش رتبه‌بندی و شرایط مالی مشتری'),
('مشاهده بخش توزیع مشتری', 'customers.distribution.view', 'مشاهده زون، برنامه و راهنمای توزیع مشتری'),
('ویرایش بخش توزیع مشتری', 'customers.distribution.edit', 'ویرایش زون، برنامه و راهنمای توزیع مشتری');

UPDATE `permissions`
SET `name` = 'ویرایش اطلاعات عمومی مشتری',
    `description` = 'ویرایش نام، دسته‌بندی و اطلاعات عمومی مشتری'
WHERE `slug` = 'customers.edit.general';

UPDATE `permissions`
SET `name` = 'ویرایش اطلاعات مکانی مشتری',
    `description` = 'ویرایش استان، شهر، آدرس و مختصات مشتری'
WHERE `slug` = 'customers.edit.location';

UPDATE `permissions`
SET `name` = 'ویرایش اطلاعات مالی و توزیع مشتری',
    `description` = 'ویرایش اطلاعات مالی و فروش مشتری'
WHERE `slug` = 'customers.edit.sales';

-- برای نقش‌هایی که قبلاً مجوز کلی ویرایش مشتری داشته‌اند، مجوزهای جزئی به‌صورت اولیه فعال می‌شود.
-- بعداً می‌توان هرکدام از این مجوزها را برای نقش یا کاربر محدود کرد.
INSERT IGNORE INTO `role_permissions` (`role_id`, `permission_id`)
SELECT rp.role_id, p_new.id
FROM `role_permissions` rp
INNER JOIN `permissions` p_old ON p_old.id = rp.permission_id
INNER JOIN `permissions` p_new
  ON p_new.slug IN (
    'customers.edit.general',
    'customers.edit.contact',
    'customers.edit.location',
    'customers.edit.sales',
    'customers.edit.assignment',
    'customers.edit.crm',
    'customers.crm.history.view',
    'customers.followups.view',
    'customers.activities.view',
    'customers.followups.manage',
    'customers.accounting.view',
    'customers.accounting.edit',
    'customers.accounting.test',
    'customers.sales.view',
    'customers.sales.edit',
    'customers.distribution.view',
    'customers.distribution.edit'
  )
WHERE p_old.slug = 'customers.edit';

INSERT IGNORE INTO `role_permissions` (`role_id`, `permission_id`)
SELECT r.id, p.id
FROM `roles` r
INNER JOIN `permissions` p
WHERE r.slug = 'superadmin'
  AND p.slug = 'customers.followups.others.manage';

-- دسترسی‌های پنل مستقل بازاریاب‌ها

INSERT IGNORE INTO `permissions` (`name`, `slug`, `description`) VALUES
('ورود به پنل بازاریاب', 'marketer.panel.login', 'اجازه ورود به پنل موبایلی بازاریاب'),
('دسترسی به پنل بازاریاب', 'marketer.panel.access', 'دسترسی پایه به پنل موبایلی بازاریاب'),
('مشاهده مشتریان اختصاص‌یافته', 'marketer.customers.view', 'مشاهده مشتریانی که به بازاریاب اختصاص داده شده‌اند'),
('ثبت مشتری پایه', 'marketer.customers.create', 'ثبت مشتری جدید با اطلاعات پایه'),
('مشاهده پیگیری‌های اختصاص‌یافته', 'marketer.followups.view', 'مشاهده پیگیری‌های اختصاص‌یافته به بازاریاب'),
('مدیریت پیگیری‌های اختصاص‌یافته', 'marketer.followups.manage', 'ثبت، انجام و لغو پیگیری‌های اختصاص‌یافته');

INSERT IGNORE INTO `role_permissions` (`role_id`, `permission_id`)
SELECT r.id, p.id
FROM `roles` r
INNER JOIN `permissions` p
WHERE r.slug = 'visitor'
  AND p.slug IN (
    'marketer.panel.login',
    'marketer.panel.access',
    'marketer.customers.view',
    'marketer.customers.create',
    'marketer.followups.view',
    'marketer.followups.manage'
  );

-- مجوزهای مدیریت کاربران، نقش‌ها و جغرافیا
INSERT IGNORE INTO `permissions` (`name`, `slug`, `description`) VALUES
('مشاهده کاربران', 'users.view', 'مشاهده فهرست کاربران سیستم'),
('ساخت کاربر', 'users.create', 'ایجاد کاربر جدید'),
('ویرایش کاربر', 'users.edit', 'ویرایش اطلاعات کاربر'),
('غیرفعال‌سازی کاربر', 'users.delete', 'غیرفعال یا فعال‌سازی کاربر'),
('مشاهده پروفایل کاربر', 'users.profile', 'مشاهده صفحه پروفایل کاربر'),
('تخصیص نقش به کاربر', 'users.role.assign', 'تغییر نقش‌های کاربر'),
('مشاهده نقش‌ها', 'roles.view', 'مشاهده فهرست نقش‌ها'),
('ساخت نقش', 'roles.create', 'ایجاد نقش جدید'),
('ویرایش نقش', 'roles.edit', 'ویرایش اطلاعات نقش'),
('حذف نقش', 'roles.delete', 'حذف نقش بدون کاربر وابسته'),
('تنظیم دسترسی‌های نقش', 'roles.permissions', 'تنظیم دسترسی‌های هر نقش'),
('مشاهده استان‌ها و شهرها', 'locations.view', 'مشاهده فهرست استان‌ها و شهرها'),
('افزودن استان', 'locations.province.create', 'افزودن استان جدید'),
('ویرایش استان', 'locations.province.edit', 'ویرایش استان'),
('حذف استان', 'locations.province.delete', 'حذف استان بدون شهر وابسته'),
('افزودن شهر', 'locations.city.create', 'افزودن شهر جدید'),
('ویرایش شهر', 'locations.city.edit', 'ویرایش شهر'),
('حذف شهر', 'locations.city.delete', 'حذف شهر'),
('مشاهده ماشین‌ها', 'vehicles.view', 'مشاهده فهرست ماشین‌های پخش'),
('افزودن ماشین', 'vehicles.create', 'تعریف ماشین جدید'),
('ویرایش ماشین', 'vehicles.edit', 'ویرایش اطلاعات ماشین'),
('غیرفعال‌سازی ماشین', 'vehicles.delete', 'غیرفعال یا فعال‌سازی ماشین'),
('مشاهده پروفایل ماشین', 'vehicles.profile', 'مشاهده جزئیات و تاریخچه ماشین'),
('گزارش تخصیص‌های ماشین', 'vehicles.assignments.view', 'مشاهده گزارش تخصیص راننده و زون ماشین‌ها'),
('تخصیص راننده به ماشین', 'vehicles.driver.assign', 'تغییر راننده ماشین'),
('مشاهده تاریخچه راننده ماشین', 'vehicles.driver.history.view', 'مشاهده تاریخچه تخصیص راننده ماشین'),
('مشاهده زون‌ها', 'zones.view', 'مشاهده فهرست زون‌ها'),
('افزودن زون', 'zones.create', 'تعریف زون جدید'),
('ویرایش زون', 'zones.edit', 'ویرایش اطلاعات زون'),
('غیرفعال‌سازی زون', 'zones.delete', 'غیرفعال یا فعال‌سازی زون'),
('مشاهده پروفایل زون', 'zones.profile', 'مشاهده ماشین‌ها و مشتریان زون'),
('گزارش تخصیص‌های زون', 'zones.assignments.view', 'مشاهده گزارش تخصیص ماشین به زون'),
('تخصیص ماشین به زون', 'zones.vehicle.assign', 'تغییر ماشین‌های زون'),
('مشاهده تاریخچه ماشین‌های زون', 'zones.vehicle.history.view', 'مشاهده تاریخچه تخصیص ماشین به زون');

INSERT IGNORE INTO `role_permissions` (`role_id`, `permission_id`)
SELECT r.id, p.id
FROM `roles` r
INNER JOIN `permissions` p
WHERE r.slug = 'superadmin'
  AND p.slug IN (
    'users.view',
    'users.create',
    'users.edit',
    'users.delete',
    'users.profile',
    'users.role.assign',
    'roles.view',
    'roles.create',
    'roles.edit',
    'roles.delete',
    'roles.permissions',
    'locations.view',
    'locations.province.create',
    'locations.province.edit',
    'locations.province.delete',
    'locations.city.create',
    'locations.city.edit',
    'locations.city.delete',
    'vehicles.view',
    'vehicles.create',
    'vehicles.edit',
    'vehicles.delete',
    'vehicles.profile',
    'vehicles.assignments.view',
    'vehicles.driver.assign',
    'vehicles.driver.history.view',
    'zones.view',
    'zones.create',
    'zones.edit',
    'zones.delete',
    'zones.profile',
    'zones.assignments.view',
    'zones.vehicle.assign',
    'zones.vehicle.history.view'
  );

-- مجوزهای گزارشات مدیریتی
INSERT IGNORE INTO `permissions` (`name`, `slug`, `description`) VALUES
('ورود به مرکز گزارشات', 'reports.view', 'مشاهده مرکز گزارشات مدیریتی'),
('گزارش مشتریان', 'reports.customers.view', 'مشاهده و فیلتر گزارش‌های مشتریان'),
('گزارش ماشین و زون', 'reports.distribution.view', 'مشاهده گزارش ماشین‌ها و زون‌ها'),
('گزارش راننده و ویزیتور', 'reports.staff.view', 'مشاهده گزارش نیروهای اجرایی'),
('گزارش تاریخچه تخصیص‌ها', 'reports.assignments.view', 'مشاهده تاریخچه تخصیص مشتری، راننده، ماشین و زون'),
('خروجی گزارشات', 'reports.export', 'دریافت خروجی Excel و چاپ گزارشات');

INSERT IGNORE INTO `role_permissions` (`role_id`, `permission_id`)
SELECT r.id, p.id
FROM `roles` r
INNER JOIN `permissions` p
WHERE r.slug = 'superadmin'
  AND p.slug IN (
    'reports.view',
    'reports.customers.view',
    'reports.distribution.view',
    'reports.staff.view',
    'reports.assignments.view',
    'reports.export'
  );
