<?php
/**
 * API: تسجيل عميل جديد - clients_requests
 * POST /api/client/client-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', 'phone', 'serviceType', 'preferredBranch', 'preferredDate', '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 (!empty($input['email']) && !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();
}

// التحقق من سنة الصنع إذا تم إدخالها
if (!empty($input['manufactureYear'])) {
    $manufactureYear = intval($input['manufactureYear']);
    $currentYear = date('Y');
    if ($manufactureYear < 1970 || $manufactureYear > $currentYear) {
        echo json_encode([
            'success' => false,
            'message' => 'سنة الصنع غير صالحة (يجب أن تكون بين 1970 و ' . $currentYear . ')'
        ], JSON_UNESCAPED_UNICODE);
        exit();
    }
}

// التحقق من VIN إذا تم إدخاله
if (!empty($input['vinNumber']) && strlen($input['vinNumber']) !== 17) {
    echo json_encode([
        'success' => false,
        'message' => 'رقم الشاصي (VIN) يجب أن يكون 17 حرفاً'
    ], JSON_UNESCAPED_UNICODE);
    exit();
}

// التحقق من التاريخ المفضل
$preferredDate = $input['preferredDate'];
if ($preferredDate < date('Y-m-d')) {
    echo json_encode([
        'success' => false,
        'message' => 'لا يمكن تحديد تاريخ في الماضي'
    ], JSON_UNESCAPED_UNICODE);
    exit();
}

// التحقق من الوقت المفضل إذا تم إدخاله
if (!empty($input['preferredTime'])) {
    $hour = intval(substr($input['preferredTime'], 0, 2));
    if ($hour < 9 || $hour > 18) {
        echo json_encode([
            'success' => false,
            'message' => 'الوقت المفضل يجب أن يكون بين 09:00 و 18:00'
        ], 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 {
    $pdo->beginTransaction();
    
    // التحقق من عدم تكرار رقم الهاتف
    $checkPhone = $pdo->prepare("SELECT id FROM clients_requests WHERE phone = ?");
    $checkPhone->execute([$input['phone']]);
    if ($checkPhone->rowCount() > 0) {
        $pdo->rollBack();
        echo json_encode([
            'success' => false,
            'message' => 'رقم الهاتف مسجل مسبقاً'
        ], JSON_UNESCAPED_UNICODE);
        exit();
    }
    
    // التحقق من عدم تكرار البريد الإلكتروني إذا تم إدخاله
    if (!empty($input['email'])) {
        $checkEmail = $pdo->prepare("SELECT id FROM clients_requests WHERE email = ?");
        $checkEmail->execute([$input['email']]);
        if ($checkEmail->rowCount() > 0) {
            $pdo->rollBack();
            echo json_encode([
                'success' => false,
                'message' => 'البريد الإلكتروني مسجل مسبقاً'
            ], JSON_UNESCAPED_UNICODE);
            exit();
        }
    }
    
    // توليد رقم طلب فريد
    $requestNumber = 'REQ-' . date('Ymd') . '-' . strtoupper(substr(uniqid(), -6));
    
    $checkReq = $pdo->prepare("SELECT id FROM clients_requests WHERE request_number = ?");
    $checkReq->execute([$requestNumber]);
    $counter = 1;
    while ($checkReq->rowCount() > 0) {
        $requestNumber = 'REQ-' . date('Ymd') . '-' . strtoupper(substr(uniqid(), -6)) . '-' . $counter;
        $checkReq->execute([$requestNumber]);
        $counter++;
    }
    
    // تشفير كلمة المرور
    $hashedPassword = password_hash($input['password'], PASSWORD_DEFAULT);
    
    // حفظ صورة رخصة السيارة
    $licensePhotoPath = null;
    if (!empty($input['carLicensePhoto'])) {
        $licensePhotoPath = saveBase64File($input['carLicensePhoto'], 'license', 'license');
    }
    
    // حفظ الصور الإضافية
    $additionalPhotosJson = null;
    if (!empty($input['additionalPhotos']) && is_array($input['additionalPhotos'])) {
        $additionalPaths = [];
        foreach ($input['additionalPhotos'] as $photo) {
            $path = saveBase64File($photo, 'additional', 'additional');
            if ($path) {
                $additionalPaths[] = $path;
            }
        }
        if (!empty($additionalPaths)) {
            $additionalPhotosJson = json_encode($additionalPaths, JSON_UNESCAPED_UNICODE);
        }
    }
    
    // إدراج البيانات
    $insertStmt = $pdo->prepare("
        INSERT INTO clients_requests (
            request_number,
            full_name,
            phone,
            email,
            governorate,
            city,
            address,
            password_hash,
            car_brand,
            car_model,
            manufacture_year,
            plate_number,
            vin_number,
            service_type,
            preferred_branch,
            preferred_date,
            preferred_time,
            car_license_photo,
            additional_photos,
            client_notes,
            status,
            created_at
        ) VALUES (
            :request_number,
            :full_name,
            :phone,
            :email,
            :governorate,
            :city,
            :address,
            :password_hash,
            :car_brand,
            :car_model,
            :manufacture_year,
            :plate_number,
            :vin_number,
            :service_type,
            :preferred_branch,
            :preferred_date,
            :preferred_time,
            :car_license_photo,
            :additional_photos,
            :client_notes,
            'pending',
            NOW()
        )
    ");
    
    $insertStmt->execute([
        ':request_number' => $requestNumber,
        ':full_name' => trim($input['fullName']),
        ':phone' => trim($input['phone']),
        ':email' => !empty($input['email']) ? trim($input['email']) : null,
        ':governorate' => !empty($input['governorate']) ? $input['governorate'] : null,
        ':city' => !empty($input['city']) ? trim($input['city']) : null,
        ':address' => !empty($input['address']) ? trim($input['address']) : null,
        ':password_hash' => $hashedPassword,
        ':car_brand' => !empty($input['carBrand']) ? $input['carBrand'] : null,
        ':car_model' => !empty($input['carModel']) ? trim($input['carModel']) : null,
        ':manufacture_year' => !empty($input['manufactureYear']) ? intval($input['manufactureYear']) : null,
        ':plate_number' => !empty($input['plateNumber']) ? trim($input['plateNumber']) : null,
        ':vin_number' => !empty($input['vinNumber']) ? strtoupper(trim($input['vinNumber'])) : null,
        ':service_type' => $input['serviceType'],
        ':preferred_branch' => $input['preferredBranch'],
        ':preferred_date' => $preferredDate,
        ':preferred_time' => !empty($input['preferredTime']) ? $input['preferredTime'] : null,
        ':car_license_photo' => $licensePhotoPath,
        ':additional_photos' => $additionalPhotosJson,
        ':client_notes' => !empty($input['clientNotes']) ? trim($input['clientNotes']) : null
    ]);
    
    $requestId = $pdo->lastInsertId();
    $pdo->commit();
    
    echo json_encode([
        'success' => true,
        'message' => 'تم تسجيل طلب الفحص بنجاح',
        'data' => [
            'id' => $requestId,
            'request_number' => $requestNumber,
            'full_name' => trim($input['fullName']),
            'phone' => trim($input['phone']),
            'email' => !empty($input['email']) ? trim($input['email']) : null,
            'service_type' => $input['serviceType'],
            'preferred_branch' => $input['preferredBranch'],
            'preferred_date' => $preferredDate,
            'preferred_time' => !empty($input['preferredTime']) ? $input['preferredTime'] : null,
            'status' => 'pending'
        ]
    ], JSON_UNESCAPED_UNICODE);
    
} catch(PDOException $e) {
    if (isset($pdo)) $pdo->rollBack();
    error_log("Database error: " . $e->getMessage());
    echo json_encode([
        'success' => false,
        'message' => 'خطأ في قاعدة البيانات: ' . $e->getMessage()
    ], JSON_UNESCAPED_UNICODE);
} catch(Exception $e) {
    if (isset($pdo)) $pdo->rollBack();
    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 = 'jpg';
        if (strpos($data[0], 'png') !== false) {
            $extension = 'png';
        } elseif (strpos($data[0], 'jpeg') !== false) {
            $extension = 'jpg';
        } elseif (strpos($data[0], 'pdf') !== false) {
            $extension = 'pdf';
        }
        
        $filename = $type . '_' . date('Ymd_His') . '_' . rand(1000, 9999) . '.' . $extension;
        $uploadDir = __DIR__ . '/../../uploads/clients/' . $type . '/';
        
        if (!is_dir($uploadDir)) {
            mkdir($uploadDir, 0777, true);
        }
        
        $fullPath = $uploadDir . $filename;
        file_put_contents($fullPath, $fileData);
        
        return 'uploads/clients/' . $type . '/' . $filename;
        
    } catch (Exception $e) {
        error_log("File save error: " . $e->getMessage());
        return null;
    }
}
?>