<?php
// เปิดใช้งาน Output Buffering เพื่อเก็บข้อมูลก่อนส่งไปยัง client
ob_start();

// เปิดใช้งาน Gzip Compression เพื่อบีบอัดข้อมูลก่อนส่งให้ลดขนาดข้อมูล
if (extension_loaded('zlib') && !ob_get_level()) {
    ob_start('ob_gzhandler');
}

// กำหนด HTTP Headers สำหรับการตอบกลับ
header('Content-Type: application/json; charset=utf-8'); // ระบุประเภทข้อมูลเป็น JSON พร้อมรองรับภาษาไทย
header('Cache-Control: no-cache, must-revalidate'); // ป้องกันการเก็บ cache
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // ตั้งวันหมดอายุเป็นอดีตเพื่อป้องกันการ cache

// อ่านข้อมูล JSON ที่ส่งมาจาก client
$input = file_get_contents('php://input');
$data = json_decode($input, true); // แปลง JSON เป็น array

// ตรวจสอบว่ามีข้อมูล username และ password หรือไม่
// if (!isset($data['username']) || !isset($data['password'])) {
//     echo json_encode([
//         'success' => false,
//         'message' => 'Username and password are required.' // ต้องการ username และ password
//     ]);
//     ob_end_flush(); // ส่งข้อมูลที่เก็บไว้ใน buffer ออกไป
//     exit; // หยุดการทำงาน
// }

$username = $data['username']; // เก็บค่า username
$password = $data['password']; // เก็บค่า password

// เตรียมข้อมูลที่จะส่งไปยัง API ภายนอกในรูปแบบ JSON
$postData = json_encode([
    'username' => $username,
    'password' => $password
]);

// เริ่มต้นการใช้งาน cURL สำหรับ HTTP request
$ch = curl_init();

// ตั้งค่าตัวเลือกสำหรับ cURL
curl_setopt($ch, CURLOPT_URL, 'https://api.ehongmd.com/loginsql'); // URL ของ API
curl_setopt($ch, CURLOPT_POST, true); // ใช้ method POST
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); // ข้อมูลที่จะส่ง
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // ให้ return ผลลัพธ์แทนแสดงออกหน้าจอ
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json', // ระบุประเภทข้อมูล
    'Content-Length: ' . strlen($postData) // ระบุขนาดข้อมูล
]);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // ไม่ตรวจสอบ SSL certificate (สำหรับ development)
curl_setopt($ch, CURLOPT_TIMEOUT, 30); // กำหนด timeout 30 วินาที

// ส่ง request ไปยัง API ภายนอก
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); // ดึง HTTP status code
$error = curl_error($ch); // ตรวจสอบว่ามี error หรือไม่

curl_close($ch); // ปิดการเชื่อมต่อ cURL

// ตรวจสอบว่ามี error จาก cURL หรือไม่
if ($error) {
    echo json_encode([
        'success' => false,
        'message' => 'Connection error: ' . $error // เกิด error ในการเชื่อมต่อ
    ]);
    ob_end_flush();
    exit;
}

// ตรวจสอบ HTTP status code ว่าสำเร็จหรือไม่ (200 = สำเร็จ)
if ($httpCode !== 200) {
    echo json_encode([
        'success' => false,
        'message' => 'API returned error code: ' . $httpCode // API คืนค่า error
    ]);
    ob_end_flush();
    exit;
}

// แปลง response จาก API (เป็น array) ให้เป็น PHP array
$apiResponse = json_decode($response, true);

// ตรวจสอบว่ามีปัญหาในการแปลง JSON หรือไม่
if (json_last_error() !== JSON_ERROR_NONE) {
    echo json_encode([
        'success' => false,
        'message' => 'Invalid response from API' // API ส่งข้อมูลผิดรูปแบบ
    ]);
    ob_end_flush();
    exit;
}

// API ส่งกลับมาเป็น array ที่มี object เดียว (รายการแรก)
if (is_array($apiResponse) && count($apiResponse) > 0) {
    $userData = $apiResponse[0]; // ดึงข้อมูล user ออกมาจาก array
    
    // ตรวจสอบว่า login สำเร็จหรือไม่จาก status field
    if (isset($userData['status']) && $userData['status'] === 'success') {
        // ตั้งค่า session ก่อนเริ่ม session (30 นาที = 1800 วินาที)
        ini_set('session.gc_maxlifetime', 1800);
        
        session_start(); // เริ่มต้น session
        
        $_SESSION['created'] = time(); // บันทึกเวลาที่สร้าง session
        $_SESSION['expires'] = time() + 1800; // กำหนดวันหมดอายุ (เวลาปัจจุบัน + 1800 วินาที)
        
        // บันทึกข้อมูล user ใน session เพื่อใช้งานต่อไป
        $_SESSION['username'] = $userData['barcode']; // เก็บ username (เป็น barcode)
        $_SESSION['logged_in'] = true; // ตั้งค่าว่า login แล้ว
        $_SESSION['user_data'] = $userData; // เก็บข้อมูลทั้งหมดของ user
        $_SESSION['token'] = $userData['token']; // เก็บ JWT token
        $_SESSION['emp_id'] = $userData['emp_id']; // เก็บ employee ID
        $_SESSION['fullname'] = trim($userData['tname'] . ' ' . $userData['fname'] . ' ' . $userData['lname']); // เก็บชื่อเต็ม
        
        // ส่ง response สำเร็จกลับไปยัง client
        echo json_encode([
            'success' => true,
            'message' => 'Login successful.', // login สำเร็จ
            'redirect' => 'index.php', // หน้าเพจที่จะ redirect ไป
            'user' => $userData // ส่งข้อมูล user กลับไปด้วย
        ]);
    } else {
        // login ไม่สำเร็จ
        echo json_encode([
            'success' => false,
            'message' => isset($userData['message']) ? $userData['message'] : 'Login failed. Invalid credentials.' // username/password ผิด
        ]);
    }
} else {
    // API ส่งข้อมูลผิดรูปแบบ
    echo json_encode([
        'success' => false,
        'message' => 'Invalid API response format'
    ]);
}

// ส่งข้อมูลที่เก็บไว้ใน buffer ออกไปยัง client
ob_end_flush();
?>

