<?php
/**
 * API: تسجيل متدرب جديد - نظام AUTO TESTER
 * تم التصحيح ليتوافق مع نموذج HTML ومع قاعدة البيانات
 */

// 1. إعدادات الأمان ومنع الأخطاء النصية
error_reporting(0);
ini_set('display_errors', 0);

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();
}

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

try {
    // الاتصال بقاعدة البيانات
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    ]);

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

    if (!$input) {
        throw new Exception("لم يتم استلام بيانات صالحة من النموذج");
    }

    // التحقق من تكرار الهاتف أو الإيميل (اختياري)
    $check = $pdo->prepare("SELECT COUNT(*) FROM `trainees_requests` WHERE `phone` = ? OR `email` = ?");
    $check->execute([$input['phone'], $input['email']]);
    if ($check->fetchColumn() > 0) {
        throw new Exception("رقم الهاتف أو البريد الإلكتروني مسجل بالفعل في طلب سابق");
    }

    // 3. توليد رقم طلب فريد للمتدرب
    $requestNumber = 'TRN-' . date('Ymd') . '-' . strtoupper(substr(uniqid(), -6));

    // 4. معالجة وحفظ الملفات (صور، سيرة ذاتية، بطاقة)
    $photoPath = !empty($input['photo']) ? saveBase64File($input['photo'], 'trn_photo') : null;
    $cvPath    = !empty($input['cv']) ? saveBase64File($input['cv'], 'trn_cv') : null;
    $idPath    = !empty($input['idCard']) ? saveBase64File($input['idCard'], 'trn_id') : null;

    // 5. جملة الإدخال (تمت إزالة user_id و username لتجنب الأخطاء السابقة)
    $sql = "INSERT INTO `trainees_requests` (
        `request_number`, `full_name`, `email`, `phone`, `governorate`, 
        `city`, `address`, `birth_date`, `gender`, `education_level`, 
        `university`, `faculty`, `specialty`, `graduation_year`, 
        `training_program`, `photo_file`, `cv_file`, `id_file`, `status`
    ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'pending')";

    $stmt = $pdo->prepare($sql);
    $stmt->execute([
        $requestNumber,
        $input['fullName'],
        $input['email'],
        $input['phone'],
        $input['governorate'],
        $input['city'],
        $input['address'],
        $input['birthDate'],
        $input['gender'],
        $input['educationLevel'],
        $input['university'],
        $input['faculty'],
        $input['specialty'],
        $input['graduationYear'], // تأكد أن حرف Y كبير كما في JavaScript
        $input['trainingProgram'], // تأكد أن حرف P كبير كما في JavaScript
        $photoPath,
        $cvPath,
        $idPath
    ]);

    // 6. رد النجاح
    echo json_encode([
        'success' => true,
        'message' => 'تم تسجيلك في البرنامج التدريبي بنجاح! رقم طلبك هو: ' . $requestNumber,
        'data' => [
            'request_number' => $requestNumber,
            'name' => $input['fullName']
        ]
    ], JSON_UNESCAPED_UNICODE);

} catch (Exception $e) {
    // رد الخطأ بصيغة JSON نظيفة
    echo json_encode([
        'success' => false,
        'message' => $e->getMessage()
    ], JSON_UNESCAPED_UNICODE);
}

/**
 * دالة حفظ ملفات Base64
 */
function saveBase64File($base64Data, $prefix) {
    if (empty($base64Data) || !strpos($base64Data, ',')) return null;
    
    try {
        $parts = explode(',', $base64Data);
        $fileData = base64_decode($parts[1]);
        
        // تحديد الامتداد (PDF أو JPG)
        $ext = (strpos($parts[0], 'pdf') !== false) ? 'pdf' : 'jpg';
        
        $filename = $prefix . '_' . time() . '_' . rand(100, 999) . '.' . $ext;
        
        // المسار: يخرج 3 مستويات للخلف ليصل لمجلد uploads الرئيسي
        $uploadDir = __DIR__ . '/../../../uploads/trainees/'; 
        
        if (!is_dir($uploadDir)) {
            mkdir($uploadDir, 0777, true);
        }
        
        if (file_put_contents($uploadDir . $filename, $fileData)) {
            return 'uploads/trainees/' . $filename;
        }
    } catch (Exception $e) {
        return null;
    }
    return null;
}