<?php
/**
 * إعدادات قاعدة البيانات والنظام
 */
// إعدادات قاعدة البيانات
define('DB_HOST', 'localhost');
define('DB_NAME', 'hrms_system');
define('DB_USER', 'root');
define('DB_PASS', '');
define('DB_CHARSET', 'utf8mb4');

// إعدادات النظام
define('SITE_NAME', 'نظام إدارة الموارد البشرية');
define('SITE_URL', 'http://' . $_SERVER['HTTP_HOST'] . '/hrms_system');
define('UPLOAD_PATH', __DIR__ . '/../uploads/');
define('UPLOAD_URL', SITE_URL . '/uploads/');

// إعدادات الأمان
define('SESSION_TIMEOUT', 3600);
define('PASSWORD_MIN_LENGTH', 6);
define('MAX_LOGIN_ATTEMPTS', 5);

// إعدادات الملفات
define('MAX_FILE_SIZE', 10 * 1024 * 1024);
define('ALLOWED_FILE_TYPES', ['pdf', 'doc', 'docx', 'jpg', 'jpeg', 'png', 'gif']);

/**
 * فئة الاتصال بقاعدة البيانات
 */
class Database {
    private static $instance = null;
    private $connection;
    
    private function __construct() {
        try {
            $dsn = "mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=" . DB_CHARSET;
            $options = [
                PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
                PDO::ATTR_EMULATE_PREPARES => false,
                PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4"
            ];
            
            $this->connection = new PDO($dsn, DB_USER, DB_PASS, $options);
        } catch (PDOException $e) {
            die("خطأ في الاتصال بقاعدة البيانات: " . $e->getMessage());
        }
    }
    
    public static function getInstance() {
        if (self::$instance === null) {
            self::$instance = new self();
        }
        return self::$instance;
    }
    
    public function getConnection() {
        return $this->connection;
    }
}

/**
 * دالة مساعدة للحصول على اتصال قاعدة البيانات
 */
function getDB() {
    return Database::getInstance();
}

/**
 * دالة للتحقق من صلاحيات المستخدم (مثال مبسط)
 */
function checkLogin() {
    if (session_status() == PHP_SESSION_NONE) {
        session_start();
    }
    if (!isset($_SESSION['user_id'])) {
        header('Location: ' . SITE_URL . '/pages/auth/login.php');
        exit();
    }
}

/**
 * دالة للتحقق من الصلاحية (مثال مبسط)
 */
function hasPermission($permissionName) {
    return isset($_SESSION['user_id']) && $_SESSION['user_id'] > 0;
}

// ----------------------------------------------------------------------------------
// الكود الخاص بإنشاء نسخة احتياطية للبيانات فقط
// ----------------------------------------------------------------------------------
checkLogin();
if (!hasPermission('system_settings')) { // تأكد أن صلاحية 'system_settings' تسمح بالنسخ الاحتياطي
    header('Location: ' . SITE_URL . '/pages/errors/access_denied.php');
    exit();
}

$database_name = DB_NAME;
// اسم الملف يشير إلى أنه يحتوي على بيانات فقط
$filename = 'backup_data_only_' . $database_name . '_' . date('Y-m-d_H-i-s') . '.sql';

// تهيئة ترويسات الملف للتنزيل
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $filename . '"');
header('Content-Transfer-encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');

try {
    // 💡 **خطوة هامة لتصحيح الأخطاء:**
    // مسار أداة mysqldump (قد تحتاج إلى تعديل هذا المسار ليناسب إعدادات الخادم الخاص بك)
    // في XAMPP على Windows، المسار غالبًا ما يكون: 'C:\\xampp\\mysql\\bin\\mysqldump.exe'
    // في أنظمة Linux/macOS، غالبًا ما يكون: '/usr/bin/mysqldump' أو '/usr/local/bin/mysqldump'
    
    // ** تم تعديل هذا السطر لتضمين المسار الافتراضي لـ XAMPP في Windows **
    $mysqldump_path = 'C:\\xampp\\mysql\\bin\\mysqldump.exe'; 

    // 💡 استخدام أوامر mysqldump لإنشاء نسخة احتياطية للبيانات فقط
    // الخيار --no-create-info (أو -t) يمنع تضمين عبارات CREATE TABLE
    // 2>&1 يقوم بتوجيه stderr (الأخطاء) إلى stdout (الإخراج العادي)
    $command = escapeshellarg($mysqldump_path) . " --no-create-info --opt -h " . escapeshellarg(DB_HOST) .
               " -u " . escapeshellarg(DB_USER);
    
    if (!empty(DB_PASS)) {
        $command .= " -p" . escapeshellarg(DB_PASS);
    }
    
    $command .= " " . escapeshellarg(DB_NAME) . " 2>&1"; // ⚡️ توجيه الأخطاء إلى الإخراج العادي

    // استخدام exec() بدلاً من passthru() لالتقاط تفاصيل الخطأ
    $output = [];
    $return_var = 0;
    exec($command, $output, $return_var);

    if ($return_var === 0) {
        // إذا كان الأمر ناجحاً، نطبع الخرج المُلتقط
        echo implode("\n", $output);
    } else {
        // إذا حدث خطأ (رمز رجوع غير صفر)، نرمي استثناء مع تفاصيل الخطأ
        throw new Exception("mysqldump فشل برمز الخطأ {$return_var}: " . implode("\n", $output));
    }

    exit();

} catch (Exception $e) {
    // سجل الخطأ وتوقف مع رسالة تفصيلية
    error_log("Database data-only backup failed: " . $e->getMessage());
    die("حدث خطأ أثناء إنشاء نسخة احتياطية للبيانات فقط: " . htmlspecialchars($e->getMessage()) . ". يرجى مراجعة سجل أخطاء الخادم لمزيد من التفاصيل.");
}
?>
