<?php
/**
 * API: تسجيل فاحص جديد - inspectors_requests
 * POST /api/inspector/inspector-register.php
 */

error_reporting(E_ALL);
ini_set('display_errors', 1);

header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');

if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(200);
    exit();
}

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    echo json_encode([
        'success' => false,
        'message' => 'طريقة غير مسموح بها'
    ], JSON_UNESCAPED_UNICODE);
    exit();
}

// ============================================
// إعدادات قاعدة البيانات
// ============================================
$host = "localhost";
$dbname = "digitals_autotester_db";
$username = "digitals";
$password = "bassam.bassam";

// ============================================
// قراءة البيانات المرسلة
// ============================================
$inputJSON = file_get_contents('php://input');
$input = json_decode($inputJSON, true);

if (!$input) {
    echo json_encode([
        'success' => false,
        'message' => 'لم يتم إرسال بيانات'
    ], JSON_UNESCAPED_UNICODE);
    exit();
}

// ============================================
// التحقق من الحقول المطلوبة (مع كلمة المرور)
// ============================================
$required_fields = ['fullName', 'email', 'phone', 'governorate', 'specialty', 'experienceYears', 'licenseType', 'password'];
$missing = [];

foreach ($required_fields as $field) {
    if (empty($input[$field])) {
        $missing[] = $field;
    }
}

if (!empty($missing)) {
    echo json_encode([
        'success' => false,
        'message' => 'الرجاء ملء جميع الحقول المطلوبة',
        'missing_fields' => $missing
    ], JSON_UNESCAPED_UNICODE);
    exit();
}

// ============================================
// التحقق من صحة البيانات
// ============================================

if (!preg_match('/^01[0-9]{9}$/', $input['phone'])) {
    echo json_encode([
        'success' => false,
        'message' => 'رقم الهاتف غير صالح - يجب أن يكون 01xxxxxxxxx'
    ], JSON_UNESCAPED_UNICODE);
    exit();
}

if (!filter_var($input['email'], FILTER_VALIDATE_EMAIL)) {
    echo json_encode([
        'success' => false,
        'message' => 'البريد الإلكتروني غير صالح'
    ], JSON_UNESCAPED_UNICODE);
    exit();
}

// التحقق من كلمة المرور
if (strlen($input['password']) < 6) {
    echo json_encode([
        'success' => false,
        'message' => 'كلمة المرور يجب أن تكون 6 أحرف على الأقل'
    ], JSON_UNESCAPED_UNICODE);
    exit();
}

$experienceYears = intval($input['experienceYears']);
if ($experienceYears < 0 || $experienceYears > 50) {
    echo json_encode([
        'success' => false,
        'message' => 'سنوات الخبرة غير صالحة (0-50)'
    ], JSON_UNESCAPED_UNICODE);
    exit();
}

// ============================================
// الاتصال بقاعدة البيانات
// ============================================
try {
    $pdo = new PDO(
        "mysql:host=$host;dbname=$dbname;charset=utf8mb4",
        $username,
        $password,
        [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
        ]
    );
} catch(PDOException $e) {
    echo json_encode([
        'success' => false,
        'message' => 'خطأ في الاتصال بقاعدة البيانات'
    ], JSON_UNESCAPED_UNICODE);
    exit();
}

try {
    // الحصول على أسماء الأعمدة في الجدول
    $columnsStmt = $pdo->query("SHOW COLUMNS FROM inspectors_requests");
    $columns = [];
    while ($row = $columnsStmt->fetch(PDO::FETCH_ASSOC)) {
        $columns[] = $row['Field'];
    }
    
    // التحقق من وجود request_number
    $hasRequestNumber = in_array('request_number', $columns);
    $hasPasswordHash = in_array('password_hash', $columns);
    
    // التحقق من عدم تكرار البريد الإلكتروني أو رقم الهاتف
    $checkStmt = $pdo->prepare("SELECT request_number FROM inspectors_requests WHERE email = ? OR phone = ?");
    $checkStmt->execute([$input['email'], $input['phone']]);
    
    if ($checkStmt->rowCount() > 0) {
        echo json_encode([
            'success' => false,
            'message' => 'البريد الإلكتروني أو رقم الهاتف مسجل مسبقاً'
        ], JSON_UNESCAPED_UNICODE);
        exit();
    }
    
    // توليد رقم طلب فريد
    $requestNumber = 'INS-' . date('Ymd') . '-' . strtoupper(substr(uniqid(), -6));
    
    // التأكد من عدم تكرار رقم الطلب
    if ($hasRequestNumber) {
        $checkReq = $pdo->prepare("SELECT request_number FROM inspectors_requests WHERE request_number = ?");
        $checkReq->execute([$requestNumber]);
        $counter = 1;
        while ($checkReq->rowCount() > 0) {
            $requestNumber = 'INS-' . date('Ymd') . '-' . strtoupper(substr(uniqid(), -6)) . '-' . $counter;
            $checkReq->execute([$requestNumber]);
            $counter++;
        }
    }
    
    // تشفير كلمة المرور
    $hashedPassword = password_hash($input['password'], PASSWORD_DEFAULT);
    
    // حفظ الصور والملفات
    $photoPath = null;
    if (!empty($input['photo'])) {
        $photoPath = saveBase64File($input['photo'], 'photo', 'photo');
    }
    
    $cvPath = null;
    if (!empty($input['cv']) && !empty($input['cvFileName'])) {
        $cvPath = saveBase64File($input['cv'], $input['cvFileName'], 'cv');
    }
    
    $licenseFilePath = null;
    if (!empty($input['licenseFile']) && !empty($input['licenseFileName'])) {
        $licenseFilePath = saveBase64File($input['licenseFile'], $input['licenseFileName'], 'license');
    }
    
    $techCertsJson = null;
    if (!empty($input['techCerts']) && is_array($input['techCerts'])) {
        $certsPaths = [];
        foreach ($input['techCerts'] as $cert) {
            if (!empty($cert['data']) && !empty($cert['name'])) {
                $path = saveBase64File($cert['data'], $cert['name'], 'certificates');
                if ($path) {
                    $certsPaths[] = $path;
                }
            }
        }
        if (!empty($certsPaths)) {
            $techCertsJson = json_encode($certsPaths, JSON_UNESCAPED_UNICODE);
        }
    }
    
    // بناء استعلام INSERT
    $insertFields = [];
    $placeholders = [];
    $params = [];
    
    $fieldMappings = [
        'request_number' => $requestNumber,
        'full_name' => trim($input['fullName']),
        'email' => trim($input['email']),
        'phone' => trim($input['phone']),
        'governorate' => $input['governorate'],
        'specialty' => $input['specialty'],
        'experience_years' => $experienceYears,
        'license_type' => $input['licenseType'],
        'photo_file' => $photoPath,
        'cv_file' => $cvPath,
        'license_file' => $licenseFilePath,
        'tech_certs' => $techCertsJson,
        'status' => 'pending'
    ];
    
    // إضافة password_hash إذا كان العمود موجوداً
    if ($hasPasswordHash) {
        $fieldMappings['password_hash'] = $hashedPassword;
    }
    
    // إضافة الأعمدة الموجودة فقط
    foreach ($fieldMappings as $column => $value) {
        if (in_array($column, $columns)) {
            $insertFields[] = $column;
            $placeholders[] = ":$column";
            $params[":$column"] = $value;
        }
    }
    
    // إضافة created_at إذا كان موجوداً
    if (in_array('created_at', $columns)) {
        $insertFields[] = 'created_at';
        $placeholders[] = ':created_at';
        $params[':created_at'] = date('Y-m-d H:i:s');
    }
    
    // تنفيذ الاستعلام
    $sql = "INSERT INTO inspectors_requests (" . implode(', ', $insertFields) . ") VALUES (" . implode(', ', $placeholders) . ")";
    $insertStmt = $pdo->prepare($sql);
    $insertStmt->execute($params);
    
    $inspectorId = $pdo->lastInsertId();
    
    echo json_encode([
        'success' => true,
        'message' => 'تم تسجيل طلب الانضمام بنجاح',
        'data' => [
            'id' => $inspectorId,
            'request_number' => $requestNumber,
            'full_name' => trim($input['fullName']),
            'email' => trim($input['email']),
            'phone' => trim($input['phone']),
            'role' => 'inspector',
            'specialty' => $input['specialty'],
            'experience_years' => $experienceYears,
            'status' => 'pending'
        ]
    ], JSON_UNESCAPED_UNICODE);
    
} catch(PDOException $e) {
    error_log("Database error: " . $e->getMessage());
    echo json_encode([
        'success' => false,
        'message' => 'خطأ في قاعدة البيانات: ' . $e->getMessage()
    ], JSON_UNESCAPED_UNICODE);
} catch(Exception $e) {
    error_log("General error: " . $e->getMessage());
    echo json_encode([
        'success' => false,
        'message' => 'حدث خطأ غير متوقع: ' . $e->getMessage()
    ], JSON_UNESCAPED_UNICODE);
}

// ============================================
// الدوال المساعدة
// ============================================

function saveBase64File($base64Data, $originalName, $type = 'file') {
    if (empty($base64Data)) return null;
    
    try {
        $data = explode(',', $base64Data);
        if (count($data) < 2) return null;
        
        $fileData = base64_decode($data[1]);
        if ($fileData === false) return null;
        
        $extension = 'file';
        if (strpos($data[0], 'pdf') !== false) {
            $extension = 'pdf';
        } elseif (strpos($data[0], 'png') !== false) {
            $extension = 'png';
        } elseif (strpos($data[0], 'jpeg') !== false || strpos($data[0], 'jpg') !== false) {
            $extension = 'jpg';
        } elseif (strpos($data[0], 'msword') !== false) {
            $extension = 'doc';
        } elseif (strpos($data[0], 'wordprocessingml') !== false) {
            $extension = 'docx';
        } else {
            $originalExtension = pathinfo($originalName, PATHINFO_EXTENSION);
            if ($originalExtension) {
                $extension = $originalExtension;
            }
        }
        
        $filename = $type . '_' . date('Ymd_His') . '_' . rand(1000, 9999) . '.' . $extension;
        $uploadDir = __DIR__ . '/../../uploads/inspectors/' . $type . '/';
        
        if (!is_dir($uploadDir)) {
            mkdir($uploadDir, 0777, true);
        }
        
        $fullPath = $uploadDir . $filename;
        file_put_contents($fullPath, $fileData);
        
        return 'uploads/inspectors/' . $type . '/' . $filename;
        
    } catch (Exception $e) {
        error_log("File save error: " . $e->getMessage());
        return null;
    }
}
?>