<?php
/**
 * ajax_handler_simple.php - نسخة مبسطة ومضمونة
 * المسار: /max7/admin/ajax_handler_simple.php
 */

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

require_once __DIR__ . '/config.php';
require_once __DIR__ . '/includes/email_service.php';

header('Content-Type: application/json');
header('X-Content-Type-Options: nosniff');

$action = $_POST['action'] ?? $_GET['action'] ?? '';

// تسجيل الطلب
logError("طلب جديد: $action - " . print_r($_POST, true));

switch ($action) {
    case 'check_auth':
        $logged_in = isset($_SESSION['customer_id']) && isset($_SESSION['valid_session']);
        echo json_encode([
            'success' => true,
            'logged_in' => $logged_in
        ]);
        break;
        
    case 'register':
        registerUser($conn);
        break;
        
    case 'verify_otp':
        verifyOTP($conn);
        break;
        
    case 'resend_otp':
        resendOTP($conn);
        break;
        
    case 'login':
        loginUser($conn);
        break;
        
    case 'forgot_password':
        forgotPassword($conn);
        break;
        
    case 'reset_password':
        resetPassword($conn);
        break;
        
    case 'logout':
        logoutUser();
        break;
        
    default:
        echo json_encode([
            'success' => true,
            'message' => 'الملف يعمل',
            'action' => $action
        ]);
}

$conn->close();

// =============================================
// الدوال
// =============================================

function registerUser($conn) {
    logError("بدء عملية تسجيل جديدة");
    
    // التحقق من البيانات
    $required = ['name', 'phone', 'email', 'address', 'password'];
    foreach ($required as $field) {
        if (empty($_POST[$field])) {
            response(false, "الحقل $field مطلوب");
            return;
        }
    }
    
    $name = trim($_POST['name']);
    $phone = trim($_POST['phone']);
    $email = trim($_POST['email']);
    $address = trim($_POST['address']);
    $password = $_POST['password'];
    $confirm = $_POST['confirm_password'] ?? '';
    
    // التحقق من صحة البريد
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        response(false, 'البريد الإلكتروني غير صحيح');
        return;
    }
    
    // التحقق من كلمة المرور
    if (strlen($password) < 6) {
        response(false, 'كلمة المرور يجب أن تكون 6 أحرف على الأقل');
        return;
    }
    
    if ($password !== $confirm) {
        response(false, 'كلمات المرور غير متطابقة');
        return;
    }
    
    // التحقق من رقم الهاتف
    if (!preg_match('/^[0-9]{9}$/', $phone)) {
        response(false, 'رقم الهاتف يجب أن يكون 9 أرقام');
        return;
    }
    
    // التحقق من عدم التكرار
    $check = $conn->prepare("SELECT id FROM customers WHERE email = ? OR phone = ?");
    $check->bind_param("ss", $email, $phone);
    $check->execute();
    $result = $check->get_result();
    
    if ($result->num_rows > 0) {
        $check->close();
        response(false, 'البريد الإلكتروني أو رقم الهاتف مسجل مسبقاً');
        return;
    }
    $check->close();
    
    // تشفير كلمة المرور
    $hashed_password = password_hash($password, PASSWORD_DEFAULT);
    
    // بدء المعاملة
    $conn->begin_transaction();
    
    try {
        // إدخال المستخدم
        $stmt = $conn->prepare("
            INSERT INTO customers (name, phone, email, password, address, email_verified) 
            VALUES (?, ?, ?, ?, ?, 0)
        ");
        $stmt->bind_param("sssss", $name, $phone, $email, $hashed_password, $address);
        
        if (!$stmt->execute()) {
            throw new Exception("فشل إدراج المستخدم: " . $stmt->error);
        }
        
        $customer_id = $stmt->insert_id;
        $stmt->close();
        
        logError("تم إنشاء مستخدم جديد برقم: $customer_id");
        
        // إنشاء OTP
        $otp = generateOTP();
        $expires_at = date('Y-m-d H:i:s', strtotime('+10 minutes'));
        
        // حذف الرموز القديمة
        $delete = $conn->prepare("DELETE FROM otp_codes WHERE email = ?");
        $delete->bind_param("s", $email);
        $delete->execute();
        $delete->close();
        
        // إضافة الرمز الجديد
        $otp_stmt = $conn->prepare("
            INSERT INTO otp_codes (email, otp_code, purpose, expires_at) 
            VALUES (?, ?, 'registration', ?)
        ");
        $otp_stmt->bind_param("sss", $email, $otp, $expires_at);
        
        if (!$otp_stmt->execute()) {
            throw new Exception("فشل إدراج OTP: " . $otp_stmt->error);
        }
        
        $otp_stmt->close();
        
        // حفظ في الجلسة
        $_SESSION['temp_otp'] = $otp;
        $_SESSION['temp_email'] = $email;
        $_SESSION['temp_name'] = $name;
        $_SESSION['temp_customer_id'] = $customer_id;
        $_SESSION['otp_time'] = time();
        
        // إرسال البريد
        $emailService = new EmailService();
        $emailSent = $emailService->sendOTP($email, $name, $otp, 'registration');
        
        $conn->commit();
        logError("تم حفظ المستخدم والـ OTP بنجاح");
        
        if ($emailSent) {
            response(true, 'تم إنشاء الحساب. يرجى التحقق من بريدك الإلكتروني', [
                'email' => $email,
                'needs_verification' => true
            ]);
        } else {
            response(true, 'تم إنشاء الحساب. رمز التحقق: ' . $otp, [
                'email' => $email,
                'needs_verification' => true,
                'dev_otp' => $otp
            ]);
        }
        
    } catch (Exception $e) {
        $conn->rollback();
        logError("خطأ في التسجيل: " . $e->getMessage());
        response(false, 'حدث خطأ أثناء إنشاء الحساب');
    }
}

function verifyOTP($conn) {
    $otp = $_POST['otp'] ?? '';
    $email = $_POST['email'] ?? '';
    
    if (empty($otp) || empty($email)) {
        response(false, 'البيانات غير كاملة');
        return;
    }
    
    logError("محاولة تحقق OTP للبريد: $email");
    
    // التحقق من OTP في قاعدة البيانات
    $stmt = $conn->prepare("
        SELECT * FROM otp_codes 
        WHERE email = ? AND otp_code = ? AND purpose = 'registration' 
        AND expires_at > NOW() AND verified = 0
        ORDER BY id DESC LIMIT 1
    ");
    $stmt->bind_param("ss", $email, $otp);
    $stmt->execute();
    $result = $stmt->get_result();
    
    if ($row = $result->fetch_assoc()) {
        // تحديث حالة OTP
        $update = $conn->prepare("UPDATE otp_codes SET verified = 1 WHERE id = ?");
        $update->bind_param("i", $row['id']);
        $update->execute();
        $update->close();
        
        // تحديث حالة المستخدم
        $update_user = $conn->prepare("UPDATE customers SET email_verified = 1 WHERE email = ?");
        $update_user->bind_param("s", $email);
        $update_user->execute();
        $update_user->close();
        
        // الحصول على بيانات المستخدم
        $user = $conn->prepare("SELECT id, name, email FROM customers WHERE email = ?");
        $user->bind_param("s", $email);
        $user->execute();
        $user_result = $user->get_result();
        $user_data = $user_result->fetch_assoc();
        $user->close();
        
        // تسجيل الدخول التلقائي
        $_SESSION['customer_id'] = $user_data['id'];
        $_SESSION['customer_name'] = $user_data['name'];
        $_SESSION['customer_email'] = $user_data['email'];
        $_SESSION['valid_session'] = true;
        
        // تنظيف الجلسة
        unset($_SESSION['temp_otp']);
        unset($_SESSION['temp_email']);
        unset($_SESSION['temp_name']);
        unset($_SESSION['temp_customer_id']);
        unset($_SESSION['otp_time']);
        
        logError("تم تحقق OTP بنجاح للمستخدم: " . $user_data['id']);
        
        response(true, 'تم التحقق بنجاح', ['auto_login' => true]);
        
    } else {
        logError("فشل تحقق OTP - رمز غير صحيح: $otp");
        response(false, 'رمز التحقق غير صحيح أو منتهي الصلاحية');
    }
    
    $stmt->close();
}

function resendOTP($conn) {
    $email = $_POST['email'] ?? $_SESSION['temp_email'] ?? '';
    $name = $_SESSION['temp_name'] ?? 'مستخدم';
    
    if (empty($email)) {
        response(false, 'البريد الإلكتروني مطلوب');
        return;
    }
    
    logError("إعادة إرسال OTP للبريد: $email");
    
    // إنشاء OTP جديد
    $otp = generateOTP();
    $expires_at = date('Y-m-d H:i:s', strtotime('+10 minutes'));
    
    // حذف الرموز القديمة
    $delete = $conn->prepare("DELETE FROM otp_codes WHERE email = ?");
    $delete->bind_param("s", $email);
    $delete->execute();
    $delete->close();
    
    // إضافة الرمز الجديد
    $otp_stmt = $conn->prepare("
        INSERT INTO otp_codes (email, otp_code, purpose, expires_at) 
        VALUES (?, ?, 'registration', ?)
    ");
    $otp_stmt->bind_param("sss", $email, $otp, $expires_at);
    $otp_stmt->execute();
    $otp_stmt->close();
    
    // تحديث الجلسة
    $_SESSION['temp_otp'] = $otp;
    $_SESSION['otp_time'] = time();
    
    // إرسال البريد
    $emailService = new EmailService();
    $emailSent = $emailService->sendOTP($email, $name, $otp, 'registration');
    
    if ($emailSent) {
        response(true, 'تم إرسال رمز جديد إلى بريدك الإلكتروني');
    } else {
        response(true, 'تم إرسال رمز جديد: ' . $otp, ['dev_otp' => $otp]);
    }
}

function loginUser($conn) {
    $email = $_POST['email'] ?? '';
    $password = $_POST['password'] ?? '';
    
    if (empty($email) || empty($password)) {
        response(false, 'البريد الإلكتروني وكلمة المرور مطلوبان');
        return;
    }
    
    logError("محاولة تسجيل دخول: $email");
    
    $stmt = $conn->prepare("
        SELECT id, name, email, password, email_verified 
        FROM customers WHERE email = ?
    ");
    $stmt->bind_param("s", $email);
    $stmt->execute();
    $result = $stmt->get_result();
    
    if ($user = $result->fetch_assoc()) {
        if (password_verify($password, $user['password'])) {
            if ($user['email_verified'] == 1) {
                $_SESSION['customer_id'] = $user['id'];
                $_SESSION['customer_name'] = $user['name'];
                $_SESSION['customer_email'] = $user['email'];
                $_SESSION['valid_session'] = true;
                
                logError("تسجيل دخول ناجح: " . $user['id']);
                response(true, 'تم تسجيل الدخول بنجاح');
                
            } else {
                // إنشاء OTP جديد
                $otp = generateOTP();
                $expires_at = date('Y-m-d H:i:s', strtotime('+10 minutes'));
                
                $otp_stmt = $conn->prepare("
                    INSERT INTO otp_codes (email, otp_code, purpose, expires_at) 
                    VALUES (?, ?, 'registration', ?)
                ");
                $otp_stmt->bind_param("sss", $email, $otp, $expires_at);
                $otp_stmt->execute();
                $otp_stmt->close();
                
                $_SESSION['temp_otp'] = $otp;
                $_SESSION['temp_email'] = $email;
                $_SESSION['temp_name'] = $user['name'];
                $_SESSION['otp_time'] = time();
                
                $emailService = new EmailService();
                $emailService->sendOTP($email, $user['name'], $otp, 'registration');
                
                response(false, 'البريد الإلكتروني غير مفعل. تم إرسال رمز التفعيل', [
                    'needs_verification' => true,
                    'email' => $email
                ]);
            }
        } else {
            logError("كلمة مرور غير صحيحة لـ: $email");
            response(false, 'كلمة المرور غير صحيحة');
        }
    } else {
        logError("بريد غير مسجل: $email");
        response(false, 'البريد الإلكتروني غير مسجل');
    }
    
    $stmt->close();
}

function forgotPassword($conn) {
    $email = $_POST['email'] ?? '';
    
    if (empty($email)) {
        response(false, 'البريد الإلكتروني مطلوب');
        return;
    }
    
    $stmt = $conn->prepare("SELECT id, name FROM customers WHERE email = ?");
    $stmt->bind_param("s", $email);
    $stmt->execute();
    $result = $stmt->get_result();
    
    if ($user = $result->fetch_assoc()) {
        $otp = generateOTP();
        $expires_at = date('Y-m-d H:i:s', strtotime('+10 minutes'));
        
        $otp_stmt = $conn->prepare("
            INSERT INTO otp_codes (email, otp_code, purpose, expires_at) 
            VALUES (?, ?, 'reset_password', ?)
        ");
        $otp_stmt->bind_param("sss", $email, $otp, $expires_at);
        $otp_stmt->execute();
        $otp_stmt->close();
        
        $_SESSION['temp_otp'] = $otp;
        $_SESSION['temp_email'] = $email;
        $_SESSION['otp_time'] = time();
        
        $emailService = new EmailService();
        $emailService->sendOTP($email, $user['name'], $otp, 'reset_password');
        
        response(true, 'تم إرسال رمز التحقق', ['email' => $email]);
        
    } else {
        response(false, 'البريد الإلكتروني غير مسجل');
    }
    
    $stmt->close();
}

function resetPassword($conn) {
    $email = $_POST['email'] ?? '';
    $password = $_POST['password'] ?? '';
    $confirm = $_POST['confirm_password'] ?? '';
    
    if (empty($email) || empty($password)) {
        response(false, 'جميع الحقول مطلوبة');
        return;
    }
    
    if (strlen($password) < 6) {
        response(false, 'كلمة المرور يجب أن تكون 6 أحرف على الأقل');
        return;
    }
    
    if ($password !== $confirm) {
        response(false, 'كلمات المرور غير متطابقة');
        return;
    }
    
    $hashed = password_hash($password, PASSWORD_DEFAULT);
    
    $stmt = $conn->prepare("UPDATE customers SET password = ? WHERE email = ?");
    $stmt->bind_param("ss", $hashed, $email);
    
    if ($stmt->execute()) {
        response(true, 'تم تغيير كلمة المرور بنجاح');
    } else {
        response(false, 'حدث خطأ');
    }
    
    $stmt->close();
}

function logoutUser() {
    $_SESSION = array();
    session_destroy();
    response(true, 'تم تسجيل الخروج');
}

function response($success, $message = null, $data = null) {
    $response = ['success' => $success];
    
    if ($message !== null) {
        $response['message'] = $message;
    }
    
    if ($data !== null) {
        $response = array_merge($response, $data);
    }
    
    echo json_encode($response, JSON_UNESCAPED_UNICODE);
    exit;
}
?>