<?php
// /api/register.php - API موحد لجميع أنواع التسجيل
header('Content-Type: application/json');
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;
}

// ============================================
// إعدادات قاعدة البيانات
// ============================================
$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->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo json_encode(['success' => false, 'message' => 'خطأ في الاتصال بقاعدة البيانات: ' . $e->getMessage()]);
    exit;
}

// استقبال البيانات
$input = file_get_contents('php://input');
$data = json_decode($input, true);

if (!$data) {
    echo json_encode(['success' => false, 'message' => 'بيانات غير صالحة']);
    exit;
}

// ============================================
// تحديد نوع التسجيل (متوافق مع role_requested)
// ============================================
$userType = $data['user_type'] ?? $data['role'] ?? 'client';

$allowedTypes = ['client', 'inspector', 'supervisor', 'trainee'];

if (!in_array($userType, $allowedTypes)) {
    $userType = 'client';
}

// ============================================
// تحديد هل يحتاج الطلب إلى موافقة أم لا
// ============================================
$requiresApproval = !in_array($userType, ['client']);

// ============================================
// التحقق من البيانات الأساسية
// ============================================
if (empty($data['full_name']) || empty($data['email']) || empty($data['phone']) || empty($data['password'])) {
    echo json_encode(['success' => false, 'message' => 'جميع الحقول المطلوبة يجب ملؤها']);
    exit;
}

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

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

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

try {
    // ============================================
    // التحقق من عدم وجود طلب سابق بنفس البريد
    // ============================================
    $check = $pdo->prepare("
        SELECT id, status FROM registration_requests 
        WHERE email = ? AND status IN ('pending', 'approved')
    ");
    $check->execute([$data['email']]);
    $existing = $check->fetch();
    
    if ($existing) {
        if ($existing['status'] === 'pending') {
            echo json_encode(['success' => false, 'message' => 'لديك طلب قيد المراجعة بالفعل']);
        } else {
            echo json_encode(['success' => false, 'message' => 'هذا البريد مسجل بالفعل']);
        }
        exit;
    }
    
    // التحقق من عدم وجود البريد في جدول users
    $checkUser = $pdo->prepare("SELECT id FROM users WHERE email = ? OR phone = ?");
    $checkUser->execute([$data['email'], $data['phone']]);
    if ($checkUser->fetch()) {
        echo json_encode(['success' => false, 'message' => 'البريد الإلكتروني أو رقم الهاتف مسجل بالفعل']);
        exit;
    }
    
    // ============================================
    // إنشاء معرفات فريدة
    // ============================================
    $verificationCode = rand(100000, 999999);
    
    // تشفير كلمة المرور
    $hashedPassword = password_hash($data['password'], PASSWORD_DEFAULT);
    
    // ============================================
    // إدراج طلب التسجيل (باستخدام role_requested)
    // ============================================
    $stmt = $pdo->prepare("
        INSERT INTO registration_requests (
            full_name,
            email,
            phone,
            role_requested,
            experience_years,
            qualifications,
            status,
            created_at
        ) VALUES (
            ?, ?, ?, ?,
            ?, ?,
            'pending',
            NOW()
        )
    ");
    
    $stmt->execute([
        $data['full_name'],
        $data['email'],
        $data['phone'],
        $userType,
        $data['experience_years'] ?? 0,
        $data['qualifications'] ?? null
    ]);
    
    $requestId = $pdo->lastInsertId();
    
    // ============================================
    // إذا كان الطلب لا يحتاج موافقة (عميل)، أنشئ المستخدم فوراً
    // ============================================
    $userId = null;
    if (!$requiresApproval) {
        // إنشاء اسم مستخدم فريد
        $baseUsername = explode('@', $data['email'])[0];
        $username = $baseUsername;
        $counter = 1;
        while (true) {
            $check = $pdo->prepare("SELECT id FROM users WHERE username = ?");
            $check->execute([$username]);
            if (!$check->fetch()) break;
            $username = $baseUsername . $counter;
            $counter++;
        }
        
        $userUuid = uniqid() . '_' . bin2hex(random_bytes(8));
        
        $stmt = $pdo->prepare("
            INSERT INTO users (
                user_uuid, username, email, phone, password_hash,
                user_type, status, full_name, city, address,
                email_verified, created_at
            ) VALUES (
                ?, ?, ?, ?, ?,
                'client', 'active', ?, ?, ?,
                1, NOW()
            )
        ");
        
        $stmt->execute([
            $userUuid,
            $username,
            $data['email'],
            $data['phone'],
            $hashedPassword,
            $data['full_name'],
            $data['city'] ?? null,
            $data['address'] ?? null
        ]);
        
        $userId = $pdo->lastInsertId();
        
        // تحديث طلب التسجيل بمعرف المستخدم
        $stmt = $pdo->prepare("UPDATE registration_requests SET status = 'approved' WHERE id = ?");
        $stmt->execute([$requestId]);
    }
    
    // ============================================
    // إرسال الرد
    // ============================================
    if ($requiresApproval) {
        echo json_encode([
            'success' => true,
            'message' => 'تم إرسال طلب التسجيل بنجاح، سيتم مراجعة بياناتك من قبل الإدارة',
            'data' => [
                'request_id' => $requestId,
                'full_name' => $data['full_name'],
                'email' => $data['email'],
                'role_requested' => $userType,
                'status' => 'pending',
                'verification_code' => $verificationCode
            ]
        ]);
    } else {
        echo json_encode([
            'success' => true,
            'message' => 'تم إنشاء الحساب بنجاح',
            'data' => [
                'user_id' => $userId,
                'full_name' => $data['full_name'],
                'email' => $data['email'],
                'phone' => $data['phone'],
                'user_type' => 'client',
                'status' => 'active',
                'verification_code' => $verificationCode
            ]
        ]);
    }
    
} catch (PDOException $e) {
    echo json_encode([
        'success' => false, 
        'message' => 'خطأ في قاعدة البيانات: ' . $e->getMessage()
    ]);
} catch (Exception $e) {
    echo json_encode([
        'success' => false,
        'message' => 'خطأ: ' . $e->getMessage()
    ]);
}
?>