<?php
require_once __DIR__ . '/db.php';

header('Content-Type: application/json; charset=utf-8');

if (!is_logged_in()) {
    echo json_encode(['success' => false, 'error' => 'กรุณาเข้าสู่ระบบก่อนใช้งานแชท']);
    exit;
}

$user = current_user();
$current_user_id = $user['id'];

$action = $_REQUEST['action'] ?? '';

// ------------------------------------------------------------
// 1. ส่งข้อความแชท (Send Message)
// ------------------------------------------------------------
if ($action === 'send' && $_SERVER['REQUEST_METHOD'] === 'POST') {
    $order_id    = filter_input(INPUT_POST, 'order_id', FILTER_VALIDATE_INT) ?: null;
    $receiver_id = filter_input(INPUT_POST, 'receiver_id', FILTER_VALIDATE_INT);
    $message     = trim($_POST['message'] ?? '');

    if (empty($message)) {
        echo json_encode(['success' => false, 'error' => 'กรุณากรอกข้อความ']);
        exit;
    }

    // หากไม่มี receiver_id ให้ค้นหาแอดมิน (หากคนส่งเป็น user) หรือหาผู้ซื้อของ order (หากคนส่งเป็น admin)
    if (!$receiver_id) {
        if (is_admin()) {
            if ($order_id) {
                $stmt = $pdo->prepare("SELECT user_id FROM orders WHERE id = ?");
                $stmt->execute([$order_id]);
                $receiver_id = $stmt->fetchColumn();
            }
        } else {
            // ดึง admin ตัวแรกในระบบ
            $stmt = $pdo->query("SELECT id FROM users WHERE role = 'admin' LIMIT 1");
            $receiver_id = $stmt->fetchColumn();
        }
    }

    if (!$receiver_id) {
        echo json_encode(['success' => false, 'error' => 'ไม่พบผู้รับข้อความ']);
        exit;
    }

    $stmt = $pdo->prepare("
        INSERT INTO chat_messages (order_id, sender_id, receiver_id, message) 
        VALUES (?, ?, ?, ?)
    ");
    $stmt->execute([$order_id, $current_user_id, $receiver_id, $message]);

    echo json_encode(['success' => true, 'message_id' => $pdo->lastInsertId()]);
    exit;
}

// ------------------------------------------------------------
// 2. ดึงข้อความแชท (Get Messages)
// ------------------------------------------------------------
if ($action === 'get') {
    $order_id      = filter_input(INPUT_GET, 'order_id', FILTER_VALIDATE_INT) ?: null;
    $other_user_id = filter_input(INPUT_GET, 'other_user_id', FILTER_VALIDATE_INT);

    // หากไม่มี other_user_id ให้หาจากคำสั่งซื้อ หรือหาแอดมิน
    if (!$other_user_id) {
        if (is_admin()) {
            if ($order_id) {
                $stmt = $pdo->prepare("SELECT user_id FROM orders WHERE id = ?");
                $stmt->execute([$order_id]);
                $other_user_id = $stmt->fetchColumn();
            }
        } else {
            $stmt = $pdo->query("SELECT id FROM users WHERE role = 'admin' LIMIT 1");
            $other_user_id = $stmt->fetchColumn();
        }
    }

    if (!$other_user_id) {
        echo json_encode(['success' => true, 'messages' => []]);
        exit;
    }

    // อัปเดตสถานะอ่านแล้วสำหรับข้อความที่ส่งมาหาเรา
    $stmt_read = $pdo->prepare("
        UPDATE chat_messages 
        SET is_read = 1 
        WHERE receiver_id = ? AND sender_id = ?
    ");
    $stmt_read->execute([$current_user_id, $other_user_id]);

    // ดึงประวัติข้อความสนทนา
    $where_order = $order_id ? "AND (order_id = ? OR order_id IS NULL)" : "";
    $sql = "
        SELECT m.*, u.fullname AS sender_name, u.role AS sender_role
        FROM chat_messages m
        JOIN users u ON m.sender_id = u.id
        WHERE ((m.sender_id = ? AND m.receiver_id = ?) OR (m.sender_id = ? AND m.receiver_id = ?))
        {$where_order}
        ORDER BY m.id ASC
    ";

    $params = [$current_user_id, $other_user_id, $other_user_id, $current_user_id];
    if ($order_id) {
        $params[] = $order_id;
    }

    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);
    $messages = $stmt->fetchAll();

    $formatted = [];
    foreach ($messages as $msg) {
        $formatted[] = [
            'id'          => $msg['id'],
            'sender_id'   => $msg['sender_id'],
            'sender_name' => $msg['sender_name'],
            'is_me'       => ($msg['sender_id'] == $current_user_id),
            'is_admin'    => ($msg['sender_role'] === 'admin'),
            'message'     => htmlspecialchars($msg['message']),
            'time'        => date('H:i', strtotime($msg['created_at'])),
            'date'        => date('d/m/Y', strtotime($msg['created_at']))
        ];
    }

    echo json_encode(['success' => true, 'messages' => $formatted]);
    exit;
}

echo json_encode(['success' => false, 'error' => 'Invalid action']);
