<?php
/**
 * EnglishSpeak — Student Login API
 *
 * Accepts POST: identifier (phone or email), password, csrf_token.
 * Returns JSON { success, message, redirect }.
 */

session_start();

// Helper: send JSON and exit
function respond(bool $success, string $message, ?string $redirect = null, int $httpCode = 200): never
{
    http_response_code($httpCode);
    $payload = ['success' => $success, 'message' => $message];
    if ($redirect !== null) {
        $payload['redirect'] = $redirect;
    }
    echo json_encode($payload, JSON_UNESCAPED_UNICODE);
    exit;
}

// Require POST method
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    respond(false, 'Phương thức không được hỗ trợ.', httpCode: 405);
}

// CSRF check
if (empty($_POST['csrf_token']) || empty($_SESSION['csrf_token']) || !hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'])) {
    respond(false, 'Yêu cầu không hợp lệ. Vui lòng tải lại trang.', httpCode: 403);
}

// Validate input presence
$identifier = trim($_POST['identifier'] ?? '');
$password   = $_POST['password'] ?? '';

if ($identifier === '' || $password === '') {
    respond(false, 'Vui lòng nhập đầy đủ thông tin.');
}

// Connect to database
require_once __DIR__ . '/../config/database.php';

try {
    $pdo = getDbConnection();

    // Determine whether identifier is email or phone
    if (strpos($identifier, '@') !== false) {
        // Email
        $stmt = $pdo->prepare('SELECT id, full_name, password_hash, status FROM students WHERE email = :email LIMIT 1');
        $stmt->execute([':email' => $identifier]);
    } else {
        // Phone
        $stmt = $pdo->prepare('SELECT id, full_name, password_hash, status FROM students WHERE phone = :phone LIMIT 1');
        $stmt->execute([':phone' => $identifier]);
    }

    $student = $stmt->fetch();

    if (!$student) {
        respond(false, 'Số điện thoại, Gmail hoặc mật khẩu không đúng.');
    }

    // Check status
    if ($student['status'] === 'locked') {
        respond(false, 'Tài khoản đang bị khóa.');
    }

    // Verify password
    if (!password_verify($password, $student['password_hash'])) {
        respond(false, 'Số điện thoại, Gmail hoặc mật khẩu không đúng.');
    }

    // Successful login — regenerate session
    session_regenerate_id(true);
    $_SESSION['student_id']   = $student['id'];
    $_SESSION['student_name'] = $student['full_name'];

    respond(true, 'Đăng nhập thành công.', redirect: 'student-home.php');

} catch (PDOException $e) {
    respond(false, 'Lỗi máy chủ. Vui lòng thử lại sau.', httpCode: 500);
}
