<?php
// Nhúng file khởi tạo để có kết nối CSDL ($conn)
require_once __DIR__ . '/core/init.php';

// --- THAY ĐỔI ID SẢN PHẨM BẠN MUỐN KIỂM TRA TẠI ĐÂY ---
$product_id_to_check = 890; // <-- Thay ID sản phẩm ở đây
// ----------------------------------------------------

// === BẮT ĐẦU TRUY VẾT ===

// Mảng để lưu trữ tất cả các sự kiện (nhập, xuất, hoàn)
$history_log = [];
$product_name = '';

// 1. LẤY LỊCH SỬ NHẬP KHO TỪ `cms_input`
$stmt_input = $conn->prepare(
    "SELECT i.input_date, i.input_code, i.detail_input, p.prd_name
     FROM cms_input i
     LEFT JOIN cms_products p ON p.id = ?
     WHERE i.deleted = 0 AND i.detail_input LIKE ?
     ORDER BY i.input_date ASC"
);
$like_pattern = '%"id":"' . $product_id_to_check . '"%';
$stmt_input->bind_param("is", $product_id_to_check, $like_pattern);
$stmt_input->execute();
$result_input = $stmt_input->get_result();

while ($row = $result_input->fetch_assoc()) {
    if (empty($product_name) && !empty($row['prd_name'])) {
        $product_name = $row['prd_name'];
    }
    if (empty($row['detail_input'])) continue;

    $items = json_decode($row['detail_input'], true);
    if (is_array($items)) {
        foreach ($items as $item) {
            if (isset($item['id']) && $item['id'] == $product_id_to_check) {
                $history_log[] = [
                    'date' => $row['input_date'],
                    'type' => 'NHẬP KHO',
                    'code' => $row['input_code'],
                    'quantity_change' => floatval($item['quantity'] ?? 0),
                    'notes' => 'Nhập hàng từ phiếu ' . $row['input_code']
                ];
                break; // Chỉ cần tìm thấy sản phẩm là đủ
            }
        }
    }
}
$stmt_input->close();


// 2. LẤY LỊCH SỬ XUẤT KHO TỪ CÁC ĐƠN HÀNG CHƯA BỊ XÓA (`cms_orders`)
$stmt_orders = $conn->prepare(
    "SELECT o.sell_date, o.output_code, o.detail_order
     FROM cms_orders o
     WHERE o.deleted = 0 AND o.detail_order LIKE ?
     ORDER BY o.sell_date ASC"
);
$stmt_orders->bind_param("s", $like_pattern);
$stmt_orders->execute();
$result_orders = $stmt_orders->get_result();

while ($row = $result_orders->fetch_assoc()) {
    if (empty($row['detail_order'])) continue;
    $items = json_decode($row['detail_order'], true);
    if (is_array($items)) {
        foreach ($items as $item) {
            if (isset($item['id']) && $item['id'] == $product_id_to_check) {
                $history_log[] = [
                    'date' => $row['sell_date'],
                    'type' => 'XUẤT KHO',
                    'code' => $row['output_code'],
                    'quantity_change' => -1 * floatval($item['quantity'] ?? 0), // Trừ kho nên là số âm
                    'notes' => 'Bán hàng theo đơn ' . $row['output_code']
                ];
                break;
            }
        }
    }
}
$stmt_orders->close();


// 3. LẤY LỊCH SỬ HOÀN KHO TỪ CÁC ĐƠN HÀNG ĐÃ BỊ XÓA
// Lưu ý quan trọng: Ngày hoàn kho là ngày `updated`, không phải `sell_date`
$stmt_deleted = $conn->prepare(
    "SELECT o.updated, o.output_code, o.detail_order
     FROM cms_orders o
     WHERE o.deleted = 1 AND o.detail_order LIKE ?
     ORDER BY o.updated ASC"
);
$stmt_deleted->bind_param("s", $like_pattern);
$stmt_deleted->execute();
$result_deleted = $stmt_deleted->get_result();

while ($row = $result_deleted->fetch_assoc()) {
    if (empty($row['detail_order'])) continue;
    $items = json_decode($row['detail_order'], true);
    if (is_array($items)) {
        foreach ($items as $item) {
            if (isset($item['id']) && $item['id'] == $product_id_to_check) {
                $history_log[] = [
                    'date' => $row['updated'],
                    'type' => 'HOÀN KHO',
                    'code' => $row['output_code'],
                    'quantity_change' => floatval($item['quantity'] ?? 0), // Hoàn kho nên cộng lại
                    'notes' => 'Hoàn kho do xóa đơn ' . $row['output_code']
                ];
                break;
            }
        }
    }
}
$stmt_deleted->close();


// 4. SẮP XẾP TẤT CẢ SỰ KIỆN THEO THỨ TỰ THỜI GIAN
usort($history_log, function ($a, $b) {
    return strtotime($a['date']) - strtotime($b['date']);
});


// 5. LẤY TỒN KHO THỰC TẾ TỪ `cms_products` ĐỂ ĐỐI CHIẾU
$stmt_product = $conn->prepare("SELECT prd_name, prd_sls FROM cms_products WHERE id = ?");
$stmt_product->bind_param("i", $product_id_to_check);
$stmt_product->execute();
$product_info = $stmt_product->get_result()->fetch_assoc();
$stmt_product->close();

$actual_stock = $product_info['prd_sls'] ?? 0;
if (empty($product_name) && !empty($product_info['prd_name'])) {
    $product_name = $product_info['prd_name'];
}


// 6. HIỂN THỊ KẾT QUẢ
echo "<style> body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; } table { border-collapse: collapse; width: 90%; margin: 20px auto; font-size: 14px; box-shadow: 0 2px 5px rgba(0,0,0,0.1); } th, td { border: 1px solid #e0e0e0; padding: 10px 12px; text-align: left; } th { background-color: #f8f9fa; font-weight: 600; } tr:nth-child(even) { background-color: #fdfdfd; } .header { text-align: center; margin-bottom: 20px; } .summary { border: 2px solid #007bff; padding: 15px; margin: 20px auto; width: 88%; background-color: #f0f8ff; border-radius: 8px; } .summary h3 { margin-top: 0; color: #0056b3; } .summary p { margin: 8px 0; font-size: 16px; } .summary span { font-weight: bold; } .stock-in { color: #28a745; } .stock-out { color: #dc3545; } .stock-return { color: #ffc107; font-weight: bold; } .final-stock { font-size: 18px !important; } .discrepancy { color: red; font-weight: bold; } </style>";

echo "<div class='header'><h1>📊 Lịch sử biến động kho</h1><h2>Sản phẩm: " . htmlspecialchars($product_name) . " (ID: " . $product_id_to_check . ")</h2></div>";

if (empty($history_log)) {
    echo "<p style='text-align:center;'>Không tìm thấy bất kỳ hoạt động nào cho sản phẩm này.</p>";
} else {
    echo "<table><thead><tr><th>#</th><th>Thời gian</th><th>Loại Giao Dịch</th><th>Mã Phiếu/Đơn</th><th>Thay Đổi SL</th><th>Tồn Kho Cuối Kỳ</th><th>Ghi Chú</th></tr></thead><tbody>";
    $running_stock = 0;
    $count = 1;
    foreach ($history_log as $entry) {
        $running_stock += $entry['quantity_change'];
        $class = '';
        if ($entry['type'] == 'NHẬP KHO') $class = 'stock-in';
        elseif ($entry['type'] == 'XUẤT KHO') $class = 'stock-out';
        else $class = 'stock-return';

        echo "<tr>";
        echo "<td>" . $count++ . "</td>";
        echo "<td>" . htmlspecialchars(date('d/m/Y H:i:s', strtotime($entry['date']))) . "</td>";
        echo "<td><strong class='{$class}'>" . htmlspecialchars($entry['type']) . "</strong></td>";
        echo "<td>" . htmlspecialchars($entry['code']) . "</td>";
        echo "<td class='{$class}'>" . ($entry['quantity_change'] > 0 ? '+' : '') . number_format($entry['quantity_change']) . "</td>";
        echo "<td style='font-weight:bold;'>" . number_format($running_stock) . "</td>";
        echo "<td>" . htmlspecialchars($entry['notes']) . "</td>";
        echo "</tr>";
    }
    echo "</tbody></table>";

    // Bảng tổng kết
    echo "<div class='summary'>";
    echo "<h3>🔍 TỔNG KẾT & ĐỐI CHIẾU</h3>";
    echo "<p class='final-stock'>Tồn kho cuối kỳ tính toán từ lịch sử: <span class='stock-in'>" . number_format($running_stock) . "</span></p>";
    echo "<p class='final-stock'>Tồn kho thực tế đang lưu trong CSDL: <span class='stock-out'>" . number_format($actual_stock) . "</span></p>";

    if (abs($running_stock - $actual_stock) > 0.001) {
        $difference = $actual_stock - $running_stock;
        echo "<p class='discrepancy'>=> CHÊNH LỆCH: " . number_format($difference) . " sản phẩm. Tồn kho trong CSDL đang CAO HƠN so với tính toán. </p>";
        echo "<p><strong>Gợi ý:</strong> Sự chênh lệch này có thể đến từ việc <strong>SỬA ĐƠN HÀNG</strong>. Khi một đơn hàng được sửa, code của bạn sẽ hoàn trả số lượng sản phẩm cũ về kho nhưng hành động này không được ghi lại như một sự kiện riêng biệt. Hãy kiểm tra các đơn hàng đã được sửa (`updated` > `sell_date`) liên quan đến sản phẩm này.</p>";
    } else {
        echo "<p style='color:green; font-weight:bold;'>✅ Dữ liệu khớp! Tồn kho thực tế bằng với tồn kho tính toán từ lịch sử.</p>";
    }
    echo "</div>";
}
?>