-- ===========================================
-- Maintenance Job Sheet - قاعدة البيانات
-- ===========================================
-- كلمة المرور الافتراضية للمدير: admin123
-- 
-- خطوات التثبيت:
-- 1. نفّذ هذا الملف (database.sql) لإنشاء القاعدة والجداول
-- 2. نفّذ database_permissions.sql لإنشاء المستخدم والصلاحيات
-- 3. عدّل config.php بمعلومات المستخدم الجديد

CREATE DATABASE IF NOT EXISTS maintenance_db 
    CHARACTER SET utf8mb4 
    COLLATE utf8mb4_unicode_ci;

USE maintenance_db;

-- جدول المستخدمين
CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    password_hash VARCHAR(255) NOT NULL,
    is_admin TINYINT(1) DEFAULT 0,
    can_edit TINYINT(1) DEFAULT 1,
    can_delete TINYINT(1) DEFAULT 1,
    can_export TINYINT(1) DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- جدول المحافظات
CREATE TABLE IF NOT EXISTS governorates (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name_ar VARCHAR(100) NOT NULL,
    name_en VARCHAR(100) NOT NULL
);

-- إدخال محافظات العراق الـ 18
INSERT INTO governorates (name_ar, name_en) VALUES
('بغداد', 'Baghdad'),
('نينوى', 'Nineveh'),
('البصرة', 'Basra'),
('الأنبار', 'Anbar'),
('ذي قار', 'Dhi Qar'),
('أربيل', 'Erbil'),
('السليمانية', 'Sulaymaniyah'),
('كركوك', 'Kirkuk'),
('صلاح الدين', 'Salahuddin'),
('واسط', 'Wasit'),
('بابل', 'Babil'),
('ديالى', 'Diyala'),
('ميسان', 'Maysan'),
('القادسية', 'Qadisiyyah'),
('المثنى', 'Muthanna'),
('النجف', 'Najaf'),
('كربلاء', 'Karbala'),
('دهوك', 'Dohuk');

-- جدول القطاعات (أهلي، حكومي، مركز جراحي، إلخ - قابل للإضافة من الواجهة)
-- for_hospitals: يظهر في قائمة قطاعات المستشفيات
-- for_clinics: يظهر في قائمة قطاعات العيادات
CREATE TABLE IF NOT EXISTS sectors (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL UNIQUE,
    for_hospitals TINYINT(1) DEFAULT 1,
    for_clinics TINYINT(1) DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT IGNORE INTO sectors (name, for_hospitals, for_clinics) VALUES 
('اهلي', 1, 1), ('حكومي', 1, 1), ('مركز جراحي', 1, 1);

-- جدول المستشفيات
CREATE TABLE IF NOT EXISTS hospitals (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    governorate_id INT NOT NULL,
    phone VARCHAR(20) NOT NULL,
    sector VARCHAR(100) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (governorate_id) REFERENCES governorates(id) ON DELETE CASCADE
);

-- جدول العيادات (منفصل عن المستشفيات)
CREATE TABLE IF NOT EXISTS clinics (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    governorate_id INT NOT NULL,
    phone VARCHAR(20) NOT NULL,
    sector VARCHAR(100) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (governorate_id) REFERENCES governorates(id) ON DELETE CASCADE
);

-- جدول الزبائن (المستشفيات/العملاء)
CREATE TABLE IF NOT EXISTS customers (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    hospital_name VARCHAR(255),
    phone VARCHAR(20),
    governorate_id INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (governorate_id) REFERENCES governorates(id) ON DELETE SET NULL
);

-- جدول الشركات
CREATE TABLE IF NOT EXISTS companies (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL UNIQUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- جدول أسماء الأجهزة
CREATE TABLE IF NOT EXISTS device_names (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL UNIQUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- إضافة بعض أسماء الأجهزة الافتراضية
INSERT IGNORE INTO device_names (name) VALUES 
('جهاز أشعة'),
('مولد أكسجين'),
('سرير كهربائي'),
('جهاز إنعاش'),
('جهاز مراقبة');

-- جدول موديلات الأجهزة (مرتبطة باسم الجهاز والشركة)
CREATE TABLE IF NOT EXISTS device_models (
    id INT AUTO_INCREMENT PRIMARY KEY,
    device_name_id INT NOT NULL,
    company_id INT NOT NULL,
    model_name VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    UNIQUE KEY unique_model (device_name_id, company_id, model_name),
    FOREIGN KEY (device_name_id) REFERENCES device_names(id) ON DELETE CASCADE,
    FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE
);

-- جدول المهندسين
CREATE TABLE IF NOT EXISTS engineers (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL UNIQUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- جدول الأجهزة
CREATE TABLE IF NOT EXISTS devices (
    id INT AUTO_INCREMENT PRIMARY KEY,
    invoice_number VARCHAR(100) NOT NULL,
    customer_id INT NOT NULL,
    hospital_name VARCHAR(255) NOT NULL,
    phone VARCHAR(20) NOT NULL,
    governorate_id INT NOT NULL,
    device_name_id INT NOT NULL,
    device_model_id INT NOT NULL,
    company_id INT NOT NULL,
    quantity INT NOT NULL DEFAULT 1,
    installation_date DATE NOT NULL,
    warranty_months INT NOT NULL DEFAULT 12,
    engineer_id INT NOT NULL,
    notes TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (customer_id) REFERENCES customers(id) ON DELETE CASCADE,
    FOREIGN KEY (governorate_id) REFERENCES governorates(id) ON DELETE CASCADE,
    FOREIGN KEY (device_name_id) REFERENCES device_names(id) ON DELETE CASCADE,
    FOREIGN KEY (device_model_id) REFERENCES device_models(id) ON DELETE CASCADE,
    FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE,
    FOREIGN KEY (engineer_id) REFERENCES engineers(id) ON DELETE CASCADE
);

-- جدول الأرقام التسلسلية للأجهزة
CREATE TABLE IF NOT EXISTS device_serials (
    id INT AUTO_INCREMENT PRIMARY KEY,
    device_id INT NOT NULL,
    serial_number VARCHAR(255) NOT NULL,
    FOREIGN KEY (device_id) REFERENCES devices(id) ON DELETE CASCADE
);

-- جدول صور الجوب شيت
CREATE TABLE IF NOT EXISTS job_sheet_images (
    id INT AUTO_INCREMENT PRIMARY KEY,
    device_id INT NOT NULL,
    invoice_number VARCHAR(100) NOT NULL,
    image_path VARCHAR(500) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (device_id) REFERENCES devices(id) ON DELETE CASCADE
);

-- جدول سجل النشاطات (مستخدم شنو سواه ووقت الحدث)
CREATE TABLE IF NOT EXISTS activity_log (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NULL,
    username VARCHAR(50) NULL,
    action VARCHAR(50) NOT NULL,
    entity_type VARCHAR(100) NOT NULL,
    entity_id INT NULL,
    details TEXT NULL,
    ip_address VARCHAR(45) NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL,
    INDEX idx_created (created_at),
    INDEX idx_user (user_id),
    INDEX idx_entity (entity_type, entity_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- جدول محاولات تسجيل الدخول (منع الاختراق)
CREATE TABLE IF NOT EXISTS login_attempts (
    ip_address VARCHAR(45) PRIMARY KEY,
    attempts INT DEFAULT 0,
    locked_until DATETIME NULL,
    last_attempt DATETIME NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- إدخال مستخدم افتراضي (كلمة المرور: admin123)
INSERT INTO users (username, password_hash, is_admin, can_edit, can_delete, can_export) VALUES 
('admin', '$2y$12$54Xqx0SDho.i7ceHLENPGei0Eu/yRpC28nSXcvSfXncb2X3gnS4Aq', 1, 1, 1, 1);

-- إضافة مهندس وشركة افتراضية للتشغيل
INSERT IGNORE INTO engineers (name) VALUES ('مهندس افتراضي');
INSERT IGNORE INTO companies (name) VALUES ('شركة افتراضية');

-- إضافة موديل افتراضي (جهاز أشعة + شركة افتراضية)
INSERT IGNORE INTO device_models (device_name_id, company_id, model_name) 
SELECT dn.id, c.id, 'موديل افتراضي' FROM device_names dn, companies c 
WHERE dn.name = 'جهاز أشعة' AND c.name = 'شركة افتراضية' LIMIT 1;
