<?php
// Tắt cache để đảm bảo dữ liệu luôn mới nhất
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
ini_set('display_errors', 1);
error_reporting(E_ALL);

// --- BUOC 1: CAU HINH THONG TIN KET NOI DATABASE ---
$db_host = 'localhost';
$db_user = 'root';      // <-- THAY TEN USER DATABASE
$db_pass = ''; // <-- THAY MAT KHAU DATABASE
$db_name = 'quanly42';        // <-- THAY TEN DATABASE

// -------------------------------------------------------------------------

$product_id = null;
if (isset($_GET['id']) && is_numeric($_GET['id'])) {
    $product_id = intval($_GET['id']);
}

?>
<!DOCTYPE html>
<html lang="vi">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Auditor Giá Vốn Sản Phẩm</title>
    <style>
        body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; line-height: 1.6; color: #333; background-color: #f4f4f4; margin: 0; padding: 20px; }
        .container { max-width: 1400px; margin: 0 auto; background-color: #fff; padding: 25px; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); }
        h1, h2, h3 { color: #0056b3; }
        form { margin-bottom: 25px; padding: 20px; border: 1px solid #ddd; border-radius: 5px; background-color: #f9f9f9; }
        table { width: 100%; border-collapse: collapse; margin-top: 20px; font-size: 14px; }
        th, td { border: 1px solid #ddd; padding: 10px; text-align: left; }
        th { background-color: #f2f2f2; font-weight: bold; position: sticky; top: 0; }
        .audit-note { font-style: italic; color: #555; font-size: 13px; }
        .audit-warn { color: #d9534f; font-weight: bold; }
        .audit-important { color: #f0ad4e; font-weight: bold; }
        .error, .summary-box { color: #333; border: 1px solid #ddd; background-color: #f2f2f2; padding: 15px; border-radius: 4px; margin-top: 20px; }
        .summary-box h3 { margin-top: 0; }
        .text-right { text-align: right; }
        .positive { color: #28a745; }
        .negative { color: #dc3545; }
        .final-val { font-weight: bold; font-size: 16px; }
    </style>
</head>
<body>
    <div class="container">
        <h1>Trình Kiểm Toán Giá Vốn Sản Phẩm</h1>
        <form method="GET" action="">
            <label for="id">Nhập ID Sản phẩm cần kiểm toán:</label>
            <input type="number" id="id" name="id" value="<?= htmlspecialchars($product_id ?? '') ?>" placeholder="Ví dụ: 123" required>
            <button type="submit">Kiểm Toán</button>
        </form>

        <?php
        if ($product_id !== null):
            $conn = new mysqli($db_host, $db_user, $db_pass, $db_name);
            if ($conn->connect_error) { die("<div class='error'>Lỗi kết nối CSDL: " . $conn->connect_error . "</div>"); }
            $conn->set_charset("utf8mb4");

            // BƯỚC A: Lấy trạng thái hiện tại từ bảng `cms_products` để đối chiếu cuối cùng
            $current_state = null;
            $stmt_current = $conn->prepare("SELECT prd_sls, prd_total_value, prd_average_cost FROM cms_products WHERE id = ?");
            if ($stmt_current) {
                $stmt_current->bind_param("i", $product_id);
                $stmt_current->execute();
                $result_current = $stmt_current->get_result();
                $current_state = $result_current->fetch_assoc();
                $stmt_current->close();
            }

            // BƯỚC B: Thu thập tất cả giao dịch và xử lý bằng PHP
            $lichSuGiaoDich = [];
            // Lấy phiếu nhập
            $sql_inputs = "SELECT id, input_code, input_date, updated, detail_input, deleted FROM cms_input";
            $result_inputs = $conn->query($sql_inputs);
            if ($result_inputs) {
                while ($row = $result_inputs->fetch_assoc()) {
                    $products = json_decode($row['detail_input'], true);
                    if (is_array($products)) {
                        foreach ($products as $product) {
                            if (isset($product['id']) && $product['id'] == $product_id) {
                                $quantity = floatval($product['quantity'] ?? 0);
                                $price = floatval($product['price'] ?? 0);
                                $type = $row['deleted'] == 1 ? 'XÓA PHIẾU NHẬP' : 'NHẬP KHO';
                                $date = $row['deleted'] == 1 ? $row['updated'] : $row['input_date'];
                                $qty_change = $row['deleted'] == 1 ? -$quantity : $quantity;
                                $val_change = $row['deleted'] == 1 ? -($quantity * $price) : ($quantity * $price);

                                $lichSuGiaoDich[] = [
                                    'NgayGiaoDich' => $date, 'MaChungTu' => $row['id'], 'LoaiGiaoDich' => $type,
                                    'SoHieu' => $row['input_code'], 'SoLuongThayDoi' => $qty_change,
                                    'DonGia' => $price, 'GiaTriThayDoi' => $val_change
                                ];
                            }
                        }
                    }
                }
            }

            // Lấy phiếu xuất (Giả định)
            // LƯU Ý: Thay đổi tên bảng `cms_orders` và cột `detail_output`, `order_date`, `order_code` nếu cần
            /*
            $sql_outputs = "SELECT id, order_code, order_date, detail_output, deleted FROM cms_orders WHERE deleted = 0";
            $result_outputs = $conn->query($sql_outputs);
            if ($result_outputs) {
                while ($row = $result_outputs->fetch_assoc()) {
                     $products = json_decode($row['detail_output'], true);
                     if (is_array($products)) {
                        foreach ($products as $product) {
                            if (isset($product['id']) && $product['id'] == $product_id) {
                                // QUAN TRỌNG: Cần có giá vốn tại thời điểm xuất được lưu trong JSON
                                // Ví dụ: $product['cost_price']
                                $cost_price_at_sale = floatval($product['cost_price'] ?? 0); 
                                $quantity = floatval($product['quantity'] ?? 0);
                                $lichSuGiaoDich[] = [
                                    'NgayGiaoDich' => $row['order_date'], 'MaChungTu' => $row['id'], 'LoaiGiaoDich' => 'XUẤT BÁN',
                                    'SoHieu' => $row['order_code'], 'SoLuongThayDoi' => -$quantity,
                                    'DonGia' => $cost_price_at_sale, 'GiaTriThayDoi' => -($quantity * $cost_price_at_sale)
                                ];
                            }
                        }
                    }
                }
            }
            */

            // Sắp xếp lại toàn bộ giao dịch theo đúng thứ tự thời gian
            usort($lichSuGiaoDich, function($a, $b) {
                $time_a = strtotime($a['NgayGiaoDich']);
                $time_b = strtotime($b['NgayGiaoDich']);
                if ($time_a == $time_b) return $a['MaChungTu'] <=> $b['MaChungTu'];
                return $time_a <=> $time_b;
            });
            
            echo "<h2>Bảng Sao Kê & Kiểm Toán Chi Tiết</h2>";
            if (!empty($lichSuGiaoDich)) {
                echo "<table><thead><tr>
                        <th>Ngày Giao Dịch</th><th>Loại GD</th><th>Số Hiệu</th>
                        <th class='text-right'>SL Thay Đổi</th><th class='text-right'>Đơn Giá</th>
                        <th class='text-right'>Giá Trị Tồn Thay Đổi</th><th class='text-right'>Tồn Cuối</th>
                        <th class='text-right'>Tổng GT Tồn</th><th class='text-right'>Giá Vốn Mới</th>
                        <th>Kiểm Tra & Ghi Chú 🕵️</th>
                      </tr></thead><tbody>";

                $tonKho = 0;
                $tongGiaTriTon = 0;
                $giaVonTruocGD = 0;

                foreach ($lichSuGiaoDich as $row) {
                    $giaVonHienTai = ($tonKho > 0) ? $tongGiaTriTon / $tonKho : 0;
                    
                    // Logic tính toán Ghi chú kiểm toán
                    $auditNote = '';
                    switch ($row['LoaiGiaoDich']) {
                        case 'NHẬP KHO':
                            $auditNote = 'Tăng giá trị tồn kho. Kiểm tra đơn giá nhập.';
                            break;
                        case 'XÓA PHIẾU NHẬP':
                            $auditNote = '<span class="audit-important">QUAN TRỌNG: Hoàn kho. Code có trừ đúng giá trị đã nhập không?</span>';
                            break;
                        case 'XUẤT BÁN':
                            $auditNote = '<span class="audit-warn">CỰC KỲ QUAN TRỌNG: Giá vốn tại thời điểm này là <strong>' . number_format($giaVonHienTai, 2) . '</strong>. Giá trị tồn kho phải giảm đi = (Số lượng xuất) * (Giá vốn này). Code xuất bán của bạn có tính đúng không?</span>';
                            break;
                    }
                    
                    // Cập nhật tồn kho và giá trị
                    $tonKho += $row['SoLuongThayDoi'];
                    $tongGiaTriTon += $row['GiaTriThayDoi'];
                    $giaVonMoi = ($tonKho > 0) ? $tongGiaTriTon / $tonKho : 0;

                    if ($tonKho < 0) {
                        $auditNote .= ' <span class="audit-warn">CẢNH BÁO: TỒN KHO ÂM!</span>';
                    }

                    // Hiển thị dòng
                    echo "<tr>
                            <td>{$row['NgayGiaoDich']}</td><td>{$row['LoaiGiaoDich']}</td><td>{$row['SoHieu']}</td>
                            <td class='text-right " . ($row['SoLuongThayDoi'] >= 0 ? 'positive' : 'negative') . "'>" . number_format($row['SoLuongThayDoi'], 2) . "</td>
                            <td class='text-right'>" . number_format($row['DonGia'], 2) . "</td>
                            <td class='text-right " . ($row['GiaTriThayDoi'] >= 0 ? 'positive' : 'negative') . "'>" . number_format($row['GiaTriThayDoi'], 2) . "</td>
                            <td class='text-right'><strong>" . number_format($tonKho, 2) . "</strong></td>
                            <td class='text-right'><strong>" . number_format($tongGiaTriTon, 2) . "</strong></td>
                            <td class='text-right' style='background-color:#fffde7;'><strong>" . number_format($giaVonMoi, 2) . "</strong></td>
                            <td class='audit-note'>{$auditNote}</td>
                          </tr>";
                }
                echo "</tbody></table>";

                // BƯỚC C: Phân tích tổng hợp và đưa ra kết luận
                echo "<div class='summary-box'>";
                echo "<h3>Phân Tích Tổng Hợp & Kết Luận</h3>";
                if ($current_state) {
                    echo "<table><thead><tr><th>Chỉ số</th><th class='text-right'>Tính toán từ Lịch sử</th><th class='text-right'>Ghi nhận trong CSDL</th><th>Kết quả</th></tr></thead><tbody>";
                    
                    // So sánh số lượng
                    $isQtyMatch = abs($tonKho - $current_state['prd_sls']) < 0.01;
                    echo "<tr><td>Tồn kho cuối cùng</td><td class='text-right final-val'>" . number_format($tonKho, 2) . "</td><td class='text-right final-val'>" . number_format($current_state['prd_sls'], 2) . "</td><td>" . ($isQtyMatch ? '✅ KHỚP' : '❌ LỆCH') . "</td></tr>";
                    
                    // So sánh tổng giá trị
                    $isTotalValueMatch = abs($tongGiaTriTon - $current_state['prd_total_value']) < 0.01;
                    echo "<tr><td>Tổng giá trị tồn</td><td class='text-right final-val'>" . number_format($tongGiaTriTon, 2) . "</td><td class='text-right final-val'>" . number_format($current_state['prd_total_value'], 2) . "</td><td>" . ($isTotalValueMatch ? '✅ KHỚP' : '❌ LỆCH') . "</td></tr>";
                    
                    // So sánh giá vốn
                    $isAvgCostMatch = abs($giaVonMoi - $current_state['prd_average_cost']) < 0.01;
                    echo "<tr><td>Giá vốn bình quân</td><td class='text-right final-val'>" . number_format($giaVonMoi, 2) . "</td><td class='text-right final-val'>" . number_format($current_state['prd_average_cost'], 2) . "</td><td>" . ($isAvgCostMatch ? '✅ KHỚP' : '❌ LỆCH') . "</td></tr>";
                    
                    echo "</tbody></table>";
                    
                    echo "<h4>Kết luận:</h4>";
                    if (!$isQtyMatch) {
                        echo "<p class='audit-warn'><strong>Nguyên nhân chính có thể là LỖI GHI NHẬN SỐ LƯỢNG.</strong> Có giao dịch nhập/xuất/xóa đã không cập nhật đúng số lượng tồn kho (`prd_sls`) trong bảng `cms_products`.</p>";
                    } elseif (!$isTotalValueMatch) {
                        echo "<p class='audit-warn'><strong>Nguyên nhân chính là LỖI TÍNH TOÁN GIÁ TRỊ TỒN KHO (`prd_total_value`).</strong> Số lượng tồn đúng nhưng tổng giá trị sai. Hãy tập trung kiểm tra các giao dịch được ghi chú <span class='audit-important'>'QUAN TRỌNG'</span> hoặc <span class='audit-warn'>'CỰC KỲ QUAN TRỌNG'</span> trong bảng trên. Rất có thể code xử lý xuất bán hoặc xóa phiếu của bạn đã trừ sai giá trị tồn kho.</p>";
                    } else {
                        echo "<p class='positive'>✅ Dữ liệu có vẻ nhất quán. Nếu bạn vẫn thấy sai lệch, có thể có giao dịch (ví dụ: kiểm kho, chuyển kho) chưa được đưa vào kịch bản kiểm toán này.</p>";
                    }
                } else {
                    echo "<p class='error'>Không tìm thấy sản phẩm với ID " . htmlspecialchars($product_id) . " trong bảng `cms_products` để đối chiếu.</p>";
                }
                echo "</div>";

            } else {
                echo "<div class='no-data'>Không tìm thấy giao dịch nào cho sản phẩm này.</div>";
            }

            $conn->close();
        endif;
        ?>
    </div>
</body>
</html>