-- =====================================================
-- نظام النسخ الاحتياطي المتقدم
-- Advanced Backup System
-- متوافق مع nursery_mgmt.sql
-- =====================================================

-- جدول النسخ الاحتياطية
CREATE TABLE IF NOT EXISTS `backups` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `backup_name` varchar(255) NOT NULL COMMENT 'اسم النسخة الاحتياطية',
  `file_name` varchar(255) NOT NULL COMMENT 'اسم الملف',
  `file_path` varchar(500) NOT NULL COMMENT 'مسار الملف',
  `file_size` bigint(20) NOT NULL DEFAULT 0 COMMENT 'حجم الملف بالبايت',
  `backup_type` enum('manual','automatic','scheduled') NOT NULL DEFAULT 'manual' COMMENT 'نوع النسخة',
  `backup_status` enum('success','failed','in_progress') NOT NULL DEFAULT 'in_progress' COMMENT 'حالة النسخة',
  `compression` tinyint(1) NOT NULL DEFAULT 1 COMMENT 'ضغط الملف',
  `includes_files` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'تضمين الملفات',
  `includes_uploads` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'تضمين المرفقات',
  `error_message` text DEFAULT NULL COMMENT 'رسالة الخطأ',
  `tables_count` int(11) DEFAULT NULL COMMENT 'عدد الجداول',
  `records_count` bigint(20) DEFAULT NULL COMMENT 'عدد السجلات',
  `duration_seconds` int(11) DEFAULT NULL COMMENT 'مدة النسخ بالثواني',
  `created_by` int(11) DEFAULT NULL COMMENT 'منشئ النسخة',
  `created_at` timestamp NOT NULL DEFAULT current_timestamp(),
  `notes` text DEFAULT NULL COMMENT 'ملاحظات',
  PRIMARY KEY (`id`),
  KEY `idx_backup_type` (`backup_type`),
  KEY `idx_backup_status` (`backup_status`),
  KEY `idx_created_at` (`created_at`),
  KEY `idx_created_by` (`created_by`),
  CONSTRAINT `fk_backup_created_by` FOREIGN KEY (`created_by`) REFERENCES `staff_users` (`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='جدول النسخ الاحتياطية';

-- جدول سجل عمليات الاستعادة
CREATE TABLE IF NOT EXISTS `backup_restores` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `backup_id` int(11) NOT NULL,
  `restore_status` enum('success','failed','in_progress') NOT NULL DEFAULT 'in_progress',
  `restore_point` timestamp NOT NULL DEFAULT current_timestamp() COMMENT 'نقطة الاستعادة',
  `restored_by` int(11) DEFAULT NULL,
  `restored_at` timestamp NOT NULL DEFAULT current_timestamp(),
  `duration_seconds` int(11) DEFAULT NULL,
  `error_message` text DEFAULT NULL,
  `notes` text DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_backup_id` (`backup_id`),
  KEY `idx_restored_by` (`restored_by`),
  CONSTRAINT `fk_restore_backup` FOREIGN KEY (`backup_id`) REFERENCES `backups` (`id`) ON DELETE CASCADE,
  CONSTRAINT `fk_restore_restored_by` FOREIGN KEY (`restored_by`) REFERENCES `staff_users` (`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='سجل عمليات الاستعادة';

-- إضافة إعدادات النسخ الاحتياطي في system_settings
-- التحقق من أعلى ID موجود لتجنب التضارب
SET @max_id = (SELECT COALESCE(MAX(id), 0) FROM system_settings);

INSERT INTO `system_settings` (`id`, `setting_key`, `setting_value`, `setting_type`, `category`, `description`, `is_required`, `updated_by`, `updated_at`, `created_at`) VALUES
-- إعدادات عامة
(@max_id + 1, 'backup_enabled', '1', 'boolean', 'backup', 'تفعيل نظام النسخ الاحتياطي', 0, NULL, NOW(), NOW()),
(@max_id + 2, 'backup_auto_enabled', '0', 'boolean', 'backup', 'تفعيل النسخ الاحتياطي التلقائي', 0, NULL, NOW(), NOW()),
(@max_id + 3, 'backup_auto_time', '03:00', 'text', 'backup', 'وقت النسخ الاحتياطي التلقائي', 0, NULL, NOW(), NOW()),
(@max_id + 4, 'backup_auto_frequency', 'daily', 'text', 'backup', 'تكرار النسخ التلقائي (daily, weekly, monthly)', 0, NULL, NOW(), NOW()),

-- إعدادات التخزين
(@max_id + 5, 'backup_path', 'storage/backups/', 'text', 'backup', 'مسار حفظ النسخ الاحتياطية', 0, NULL, NOW(), NOW()),
(@max_id + 6, 'backup_max_size', '500', 'number', 'backup', 'الحد الأقصى لحجم النسخة (MB)', 0, NULL, NOW(), NOW()),
(@max_id + 7, 'backup_retention_days', '30', 'number', 'backup', 'عدد أيام الاحتفاظ بالنسخ', 0, NULL, NOW(), NOW()),
(@max_id + 8, 'backup_max_backups', '10', 'number', 'backup', 'الحد الأقصى لعدد النسخ المحفوظة', 0, NULL, NOW(), NOW()),

-- إعدادات الضغط والمحتوى
(@max_id + 9, 'backup_compression', '1', 'boolean', 'backup', 'ضغط ملفات النسخ الاحتياطي', 0, NULL, NOW(), NOW()),
(@max_id + 10, 'backup_compression_level', '6', 'number', 'backup', 'مستوى الضغط (1-9)', 0, NULL, NOW(), NOW()),
(@max_id + 11, 'backup_include_files', '0', 'boolean', 'backup', 'تضمين الملفات في النسخة', 0, NULL, NOW(), NOW()),
(@max_id + 12, 'backup_include_uploads', '1', 'boolean', 'backup', 'تضمين المرفقات في النسخة', 0, NULL, NOW(), NOW()),
(@max_id + 13, 'backup_include_logs', '0', 'boolean', 'backup', 'تضمين السجلات في النسخة', 0, NULL, NOW(), NOW()),

-- إعدادات الأمان
(@max_id + 14, 'backup_encrypt', '0', 'boolean', 'backup', 'تشفير ملفات النسخ الاحتياطي', 0, NULL, NOW(), NOW()),
(@max_id + 15, 'backup_require_password', '0', 'boolean', 'backup', 'طلب كلمة مرور للاستعادة', 0, NULL, NOW(), NOW()),
(@max_id + 16, 'backup_allowed_ips', '', 'text', 'backup', 'عناوين IP المسموح لها (فاصلة)', 0, NULL, NOW(), NOW()),

-- إعدادات الإشعارات
(@max_id + 17, 'backup_notify_email', '', 'text', 'backup', 'البريد الإلكتروني للإشعارات', 0, NULL, NOW(), NOW()),
(@max_id + 18, 'backup_notify_success', '1', 'boolean', 'backup', 'إرسال إشعار عند النجاح', 0, NULL, NOW(), NOW()),
(@max_id + 19, 'backup_notify_failure', '1', 'boolean', 'backup', 'إرسال إشعار عند الفشل', 0, NULL, NOW(), NOW()),

-- إعدادات متقدمة
(@max_id + 20, 'backup_exclude_tables', '', 'text', 'backup', 'جداول مستثناة من النسخ (فاصلة)', 0, NULL, NOW(), NOW()),
(@max_id + 21, 'backup_db_only', '0', 'boolean', 'backup', 'نسخ قاعدة البيانات فقط', 0, NULL, NOW(), NOW()),
(@max_id + 22, 'backup_incremental', '0', 'boolean', 'backup', 'نسخ احتياطي تزايدي', 0, NULL, NOW(), NOW()),
(@max_id + 23, 'backup_verify_after', '1', 'boolean', 'backup', 'التحقق من النسخة بعد الإنشاء', 0, NULL, NOW(), NOW())
ON DUPLICATE KEY UPDATE 
    setting_value = VALUES(setting_value),
    description = VALUES(description);

-- إضافة صلاحيات النسخ الاحتياطي (متوافق مع البنية الحالية)
-- البنية الحالية: id, code, label_ar
-- التحقق من أعلى ID موجود
SET @max_perm_id = (SELECT COALESCE(MAX(id), 0) FROM permissions);

-- حذف الصلاحيات القديمة إن وجدت
DELETE FROM `permissions` WHERE `code` LIKE 'backup.%';

-- إضافة الصلاحيات الجديدة
INSERT INTO `permissions` (`id`, `code`, `label_ar`) VALUES
(@max_perm_id + 1, 'backup.read', 'عرض النسخ الاحتياطية'),
(@max_perm_id + 2, 'backup.create', 'إنشاء نسخة احتياطية'),
(@max_perm_id + 3, 'backup.download', 'تحميل النسخ الاحتياطية'),
(@max_perm_id + 4, 'backup.restore', 'استعادة النسخ الاحتياطية'),
(@max_perm_id + 5, 'backup.delete', 'حذف النسخ الاحتياطية'),
(@max_perm_id + 6, 'backup.settings', 'إدارة إعدادات النسخ الاحتياطي')
ON DUPLICATE KEY UPDATE label_ar = VALUES(label_ar);

-- منح جميع صلاحيات النسخ الاحتياطي للمدير الأساسي (role_id = 1)
INSERT INTO `role_permissions` (`role_id`, `perm_id`)
SELECT 1, id FROM `permissions` WHERE code LIKE 'backup.%'
ON DUPLICATE KEY UPDATE role_id = role_id;

-- عرض النتائج
SELECT '✅ تم إنشاء الجداول بنجاح' AS status;
SELECT COUNT(*) AS 'عدد إعدادات النسخ الاحتياطي' FROM system_settings WHERE category = 'backup';
SELECT COUNT(*) AS 'عدد صلاحيات النسخ الاحتياطي' FROM permissions WHERE code LIKE 'backup.%';
SELECT '⚠️ لا تنسَ إنشاء مجلد: storage/backups/' AS reminder;
