<?php
require_once __DIR__ . '/../core/init.php';
require_once __DIR__ . '/../includes/receipt_helpers.php'; // << THÊM DÒNG NÀY

header('Content-Type: application/json; charset=utf-8');
if (session_status() == PHP_SESSION_NONE) { session_start(); }

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

// ACTION: LẤY DANH SÁCH PHIẾU THU
if ($action == 'get_receipts') {
    $draw = intval($_POST['draw'] ?? 0);
    $start = intval($_POST['start'] ?? 0);
    $length = intval($_POST['length'] ?? 10);
    $search = $_POST['search']['value'] ?? '';

    // Xây dựng câu lệnh SELECT
    $baseQuery = "FROM cms_receipt r LEFT JOIN cms_users u ON r.user_init = u.ID LEFT JOIN cms_stores s ON r.store_id = s.ID";
    $whereClauses = ["r.deleted = 0"];
    $params = [];
    $types = '';

    // Lọc theo từ khóa tìm kiếm (Mã phiếu thu)
    if (!empty($search)) {
        $whereClauses[] = "r.receipt_code LIKE ?";
        $params[] = "%" . $search . "%";
        $types .= 's';
    }

    // Lọc theo hình thức thu
    if (!empty($_POST['type_id'])) {
        $whereClauses[] = "r.type_id = ?";
        $params[] = $_POST['type_id'];
        $types .= 'i';
    }

    // Lọc theo ngày tháng
    if (!empty($_POST['start_date']) && !empty($_POST['end_date'])) {
        $whereClauses[] = "DATE(r.receipt_date) BETWEEN ? AND ?";
        $params[] = $_POST['start_date'];
        $params[] = $_POST['end_date'];
        $types .= 'ss';
    }

    $whereSql = " WHERE " . implode(" AND ", $whereClauses);

    // Đếm tổng số bản ghi
    $totalRecordsQuery = $conn->query("SELECT COUNT(r.ID) " . $baseQuery);
    $totalRecords = $totalRecordsQuery->fetch_row()[0];

    // Đếm số bản ghi sau khi lọc
    $totalFilteredQuery = $conn->prepare("SELECT COUNT(r.ID) " . $baseQuery . $whereSql);
    if (!empty($types)) { $totalFilteredQuery->bind_param($types, ...$params); }
    $totalFilteredQuery->execute();
    $totalFiltered = $totalFilteredQuery->get_result()->fetch_row()[0];
    $totalFilteredQuery->close();
    
    // Lấy dữ liệu cho bảng
    $dataQuery = "SELECT r.ID, r.receipt_code, r.receipt_image, s.store_name, r.receipt_date, u.display_name as user_name, r.notes, r.type_id, r.total_money " . $baseQuery . $whereSql . " ORDER BY r.ID DESC LIMIT ?, ?";
    $dataStmt = $conn->prepare($dataQuery);
    $data_types = $types . 'ii';
    $data_params = array_merge($params, [$start, $length]);
    $dataStmt->bind_param($data_types, ...$data_params);
    $dataStmt->execute();
    $result = $dataStmt->get_result();
    
    $data = [];
    $receipt_types = get_receipt_types();
    while ($row = $result->fetch_assoc()) {
        $row['type_name'] = $receipt_types[$row['type_id']] ?? 'Không xác định';
        $data[] = $row;
    }
    $dataStmt->close();

    // Tính tổng tiền sau khi lọc
    $sumQuery = $conn->prepare("SELECT SUM(r.total_money) as total_sum " . $baseQuery . $whereSql);
    if (!empty($types)) { $sumQuery->bind_param($types, ...$params); }
    $sumQuery->execute();
    $sumResult = $sumQuery->get_result()->fetch_assoc();
    $totalSum = $sumResult['total_sum'] ?? 0;
    $sumQuery->close();

    echo json_encode([
        "draw" => $draw,
        "recordsTotal" => intval($totalRecords),
        "recordsFiltered" => intval($totalFiltered),
        "data" => $data,
        "totalSum" => $totalSum
    ]);
    exit();
}

// ACTION: LƯU PHIẾU THU (THÊM & SỬA)
if ($action == 'save_receipt') {
    $id = intval($_POST['id'] ?? 0);
    $notes = trim($_POST['notes'] ?? '');
    $type_id = intval($_POST['type_id'] ?? 0);
    $total_money = floatval($_POST['total_money'] ?? 0);
    $customer_id = intval($_POST['customer_id'] ?? 0); // Có thể cần dùng
    $receipt_date = $_POST['receipt_date'] ?? date('Y-m-d H:i:s');
    $user_id = $_SESSION['user_id'] ?? 0;
    $store_id = $_SESSION['store_id'] ?? 1; // Lấy từ session hoặc mặc định

    if ($total_money <= 0) {
        echo json_encode(['status' => 'error', 'message' => 'Số tiền thu phải lớn hơn 0.']);
        exit();
    }

    // Xử lý upload ảnh
    $image_path = $_POST['current_image'] ?? '';
    if (isset($_FILES['receipt_image']) && $_FILES['receipt_image']['error'] == 0) {
        $target_dir = __DIR__ . "/../../uploads/receipts/";
        if (!is_dir($target_dir)) { mkdir($target_dir, 0755, true); }
        $file_name = time() . '_' . basename($_FILES["receipt_image"]["name"]);
        $target_file = $target_dir . $file_name;
        if (move_uploaded_file($_FILES["receipt_image"]["tmp_name"], $target_file)) {
            $image_path = 'uploads/receipts/' . $file_name;
        }
    }

    if ($id > 0) { // Cập nhật
        $sql = "UPDATE cms_receipt SET notes=?, type_id=?, total_money=?, receipt_date=?, receipt_image=?, user_upd=? WHERE ID=?";
        $stmt = $conn->prepare($sql);
        $stmt->bind_param('sidssii', $notes, $type_id, $total_money, $receipt_date, $image_path, $user_id, $id);
    } else { // Thêm mới
        // Tạo mã phiếu thu mới
        $last_id_result = $conn->query("SELECT ID FROM cms_receipt ORDER BY ID DESC LIMIT 1");
        $last_id = $last_id_result ? $last_id_result->fetch_row()[0] : 0;
        $receipt_code = 'PT' . str_pad($last_id + 1, 7, '0', STR_PAD_LEFT);
        
        $sql = "INSERT INTO cms_receipt (receipt_code, notes, type_id, total_money, receipt_date, receipt_image, store_id, user_init) VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
        $stmt = $conn->prepare($sql);
        $stmt->bind_param('ssidsiii', $receipt_code, $notes, $type_id, $total_money, $receipt_date, $image_path, $store_id, $user_id);
    }

    if ($stmt && $stmt->execute()) {
        echo json_encode(['status' => 'success', 'message' => 'Lưu phiếu thu thành công!']);
    } else {
        echo json_encode(['status' => 'error', 'message' => 'Lỗi khi lưu phiếu thu: ' . $conn->error]);
    }
    $stmt->close();
    exit();
}

// ACTION: LẤY CHI TIẾT PHIẾU THU
if ($action == 'get_receipt_details') {
    $id = intval($_GET['id'] ?? 0);
    $stmt = $conn->prepare("SELECT * FROM cms_receipt WHERE ID = ?");
    $stmt->bind_param('i', $id);
    $stmt->execute();
    $result = $stmt->get_result()->fetch_assoc();
    echo json_encode(['status' => 'success', 'data' => $result]);
    exit();
}

// ACTION: XÓA PHIẾU THU
if ($action == 'delete_receipt') {
    $id = intval($_POST['id'] ?? 0);
    $stmt = $conn->prepare("UPDATE cms_receipt SET deleted = 1 WHERE ID = ?");
    $stmt->bind_param('i', $id);
    if ($stmt->execute()) {
        echo json_encode(['status' => 'success', 'message' => 'Xóa phiếu thu thành công!']);
    } else {
        echo json_encode(['status' => 'error', 'message' => 'Lỗi khi xóa.']);
    }
    exit();
}

echo json_encode(['status' => 'error', 'message' => 'Hành động không hợp lệ.']);
$conn->close();
?>