<?php
/**
 * نظام إدارة العيادات والأطباء
 * تشغيل: php migrations/run_017_clinic_management_system.php
 */

require_once __DIR__ . '/../config/config.php';
require_once __DIR__ . '/../src/Core/Database.php';

use App\Core\Database;

$config = require __DIR__ . '/../config/config.php';
$db = Database::getInstance($config['db'])->connection();

echo "بدء إنشاء نظام إدارة العيادات والأطباء...\n\n";

// قراءة ملف SQL وتنفيذه
$sqlFile = __DIR__ . '/017_clinic_management_system.sql';
if (!file_exists($sqlFile)) {
    die("❌ ملف SQL غير موجود: $sqlFile\n");
}

$sql = file_get_contents($sqlFile);

// تقسيم SQL إلى أوامر منفصلة
$statements = array_filter(
    array_map('trim', explode(';', $sql)),
    function($stmt) {
        return !empty($stmt) && !preg_match('/^--/', $stmt);
    }
);

$successCount = 0;
$errorCount = 0;

foreach ($statements as $statement) {
    if (empty(trim($statement))) continue;
    
    try {
        $db->exec($statement);
        $successCount++;
        // استخراج اسم الجدول للإبلاغ
        if (preg_match('/CREATE TABLE (?:IF NOT EXISTS )?`?(\w+)`?/i', $statement, $matches)) {
            echo "✓ تم إنشاء جدول: {$matches[1]}\n";
        } elseif (preg_match('/ALTER TABLE `?(\w+)`?/i', $statement, $matches)) {
            echo "✓ تم تحديث جدول: {$matches[1]}\n";
        }
    } catch (PDOException $e) {
        $errorCount++;
        // تجاهل الأخطاء المتعلقة بوجود الجدول/العمود
        if (strpos($e->getMessage(), 'already exists') !== false || 
            strpos($e->getMessage(), 'Duplicate column') !== false) {
            echo "⚠ تم التخطي (موجود مسبقاً)\n";
        } else {
            echo "❌ خطأ: " . $e->getMessage() . "\n";
        }
    }
}

// إضافة الصلاحيات الجديدة
echo "\nإضافة الصلاحيات الجديدة...\n";

$permissions = [
    // إدارة العيادات
    ['clinics.view', 'عرض العيادات'],
    ['clinics.create', 'إضافة العيادات'],
    ['clinics.update', 'تعديل العيادات'],
    ['clinics.delete', 'حذف العيادات'],
    
    // إدارة الأطباء
    ['doctors.view', 'عرض الأطباء'],
    ['doctors.create', 'إضافة الأطباء'],
    ['doctors.update', 'تعديل الأطباء'],
    ['doctors.delete', 'حذف الأطباء'],
    ['doctors.schedule', 'إدارة جدول الأطباء'],
    
    // المواعيد
    ['appointments.view', 'عرض المواعيد'],
    ['appointments.create', 'إضافة المواعيد'],
    ['appointments.update', 'تعديل المواعيد'],
    ['appointments.cancel', 'إلغاء المواعيد'],
    
    // السجلات الطبية
    ['visits.view', 'عرض الزيارات'],
    ['visits.create', 'إضافة الزيارات'],
    ['visits.update', 'تعديل الزيارات'],
    ['visits.delete', 'حذف الزيارات'],
    
    // الوصفات
    ['prescriptions.view', 'عرض الوصفات'],
    ['prescriptions.create', 'إضافة الوصفات'],
    ['prescriptions.dispense', 'صرف الوصفات'],
    
    // الفواتير
    ['clinic_invoices.view', 'عرض فواتير العيادة'],
    ['clinic_invoices.create', 'إضافة فواتير العيادة'],
    ['clinic_invoices.update', 'تعديل فواتير العيادة'],
    
    // الصيدلية
    ['pharmacy.view', 'عرض الصيدلية'],
    ['pharmacy.manage', 'إدارة الصيدلية'],
    
    // الطوابير
    ['queue.view', 'عرض الطوابير'],
    ['queue.manage', 'إدارة الطوابير'],
    
    // التقارير
    ['clinic_reports.view', 'عرض تقارير العيادة'],
];

foreach ($permissions as $perm) {
    try {
        $stmt = $db->prepare("INSERT INTO permissions (code, name) VALUES (?, ?)");
        $stmt->execute([$perm[0], $perm[1]]);
        echo "✓ تم إضافة الصلاحية: {$perm[0]}\n";
    } catch (PDOException $e) {
        if (strpos($e->getMessage(), 'Duplicate entry') !== false) {
            echo "⚠ الصلاحية موجودة مسبقاً: {$perm[0]}\n";
        } else {
            echo "❌ خطأ في إضافة الصلاحية {$perm[0]}: " . $e->getMessage() . "\n";
        }
    }
}

echo "\n========================================\n";
echo "✓ تم تنفيذ $successCount أمر بنجاح\n";
if ($errorCount > 0) {
    echo "⚠ واجه $errorCount خطأ (بعضها قد يكون طبيعياً)\n";
}
echo "تم الانتهاء من إنشاء نظام إدارة العيادات!\n";
