<?php
require_once __DIR__ . '/../core/init.php';
header('Content-Type: application/json');

$action = trim($_REQUEST['action'] ?? '');
$user_id = $_SESSION['user_id'] ?? 0;

// ACTION: LƯU (THÊM MỚI HOẶC CẬP NHẬT) NHÀ CUNG CẤP
if ($action == 'save_supplier') {
    // ... code này giữ nguyên, không thay đổi ...
    $supplier_id = intval($_POST['supplier_id'] ?? 0);
    $supplier_name = trim($_POST['supplier_name'] ?? '');

    if (empty($supplier_name)) {
        echo json_encode(['status' => 'error', 'message' => 'Tên nhà cung cấp là bắt buộc.']);
        exit();
    }

    $supplier_code = trim($_POST['supplier_code'] ?? '');
    $supplier_phone = trim($_POST['supplier_phone'] ?? '');
    $supplier_email = trim($_POST['supplier_email'] ?? '');
    $tax_code = trim($_POST['tax_code'] ?? '');
    $supplier_addr = trim($_POST['supplier_addr'] ?? '');
    $notes = trim($_POST['notes'] ?? '');

    if ($supplier_id > 0) {
        $sql = "UPDATE cms_suppliers SET supplier_code=?, supplier_name=?, supplier_phone=?, supplier_email=?, tax_code=?, supplier_addr=?, notes=?, user_upd=? WHERE ID=?";
        $stmt = $conn->prepare($sql);
        $stmt->bind_param('sssssssii', $supplier_code, $supplier_name, $supplier_phone, $supplier_email, $tax_code, $supplier_addr, $notes, $user_id, $supplier_id);
        if ($stmt->execute()) {
            echo json_encode(['status' => 'success', 'message' => 'Cập nhật nhà cung cấp thành công!']);
        } else {
            echo json_encode(['status' => 'error', 'message' => 'Lỗi khi cập nhật: ' . $stmt->error]);
        }
        $stmt->close();
    } else {
        if (empty($supplier_code)) {
            $last_id_result = $conn->query("SELECT ID FROM cms_suppliers ORDER BY ID DESC LIMIT 1");
            $last_id = $last_id_result && $last_id_result->num_rows > 0 ? $last_id_result->fetch_row()[0] : 0;
            $supplier_code = 'NCC' . str_pad($last_id + 1, 5, '0', STR_PAD_LEFT);
        }
        $sql = "INSERT INTO cms_suppliers (supplier_code, supplier_name, supplier_phone, supplier_email, tax_code, supplier_addr, notes, user_init) VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
        $stmt = $conn->prepare($sql);
        $stmt->bind_param('sssssssi', $supplier_code, $supplier_name, $supplier_phone, $supplier_email, $tax_code, $supplier_addr, $notes, $user_id);
        if ($stmt->execute()) {
            echo json_encode(['status' => 'success', 'message' => 'Thêm nhà cung cấp thành công!']);
        } else {
            echo json_encode(['status' => 'error', 'message' => 'Lỗi khi thêm: ' . $stmt->error]);
        }
        $stmt->close();
    }
    exit();
}

// ACTION: LẤY THÔNG TIN CHI TIẾT CỦA 1 NHÀ CUNG CẤP
if ($action == 'get_supplier_details') {
    // ... code này giữ nguyên, không thay đổi ...
    $id = isset($_GET['id']) ? intval($_GET['id']) : 0;
    if ($id > 0) {
        $stmt = $conn->prepare("SELECT * FROM cms_suppliers WHERE ID = ?");
        $stmt->bind_param("i", $id);
        $stmt->execute();
        $result = $stmt->get_result();
        if ($result->num_rows > 0) {
            $data = $result->fetch_assoc();
            echo json_encode(['status' => 'success', 'data' => $data]);
        } else {
            echo json_encode(['status' => 'error', 'message' => 'Không tìm thấy nhà cung cấp.']);
        }
        $stmt->close();
    } else {
        echo json_encode(['status' => 'error', 'message' => 'ID không hợp lệ.']);
    }
    exit();
}

// ACTION: XÓA NHÀ CUNG CẤP
if ($action == 'delete_supplier') {
    // ... code này giữ nguyên, không thay đổi ...
     $id = isset($_POST['id']) ? intval($_POST['id']) : 0;
    if ($id > 0) {
        $stmt = $conn->prepare("DELETE FROM cms_suppliers WHERE ID = ?");
        $stmt->bind_param("i", $id);
        if ($stmt->execute() && $stmt->affected_rows > 0) {
            echo json_encode(['status' => 'success', 'message' => 'Xóa nhà cung cấp thành công!']);
        } else {
            echo json_encode(['status' => 'error', 'message' => 'Xóa không thành công hoặc nhà cung cấp không tồn tại.']);
        }
        $stmt->close();
    } else {
        echo json_encode(['status' => 'error', 'message' => 'ID không hợp lệ.']);
    }
    exit();
}

// ACTION: THANH TOÁN NỢ CHO NHÀ CUNG CẤP (CHI NỢ) - ĐÃ SỬA LẠI
if ($action == 'pay_debt_to_supplier') {
    $import_id = isset($_POST['import_id']) ? intval($_POST['import_id']) : 0;
    $amount_to_pay = isset($_POST['amount']) ? floatval($_POST['amount']) : 0;

    if ($import_id <= 0 || $amount_to_pay <= 0) {
        echo json_encode(['status' => 'error', 'message' => 'Dữ liệu không hợp lệ.']);
        exit();
    }
    
    $conn->begin_transaction();

    try {
        $stmt_get = $conn->prepare("SELECT supplier_id, payed, lack, input_code FROM cms_input WHERE ID = ? FOR UPDATE");
        $stmt_get->bind_param("i", $import_id);
        $stmt_get->execute();
        $current_import = $stmt_get->get_result()->fetch_assoc();
        $stmt_get->close();

        if (!$current_import) {
            throw new Exception("Không tìm thấy phiếu nhập.");
        }
        
        if ($amount_to_pay > $current_import['lack']) {
            $amount_to_pay = $current_import['lack'];
        }

        $new_payed = $current_import['payed'] + $amount_to_pay;
        $new_lack = $current_import['lack'] - $amount_to_pay;
        
        $stmt_update = $conn->prepare("UPDATE cms_input SET payed = ?, lack = ? WHERE ID = ?");
        $stmt_update->bind_param("ddi", $new_payed, $new_lack, $import_id);
        $stmt_update->execute();
        $stmt_update->close();

        // Tạo một phiếu chi tương ứng trong bảng cms_payment
        $last_payment_result = $conn->query("SELECT ID FROM cms_payment ORDER BY ID DESC LIMIT 1");
        $last_payment_id = $last_payment_result ? $last_payment_result->fetch_row()[0] : 0;
        $payment_code = 'PC' . str_pad($last_payment_id + 1, 6, '0', STR_PAD_LEFT);
        
        $supplier_name_result = $conn->query("SELECT supplier_name FROM cms_suppliers WHERE ID = " . $current_import['supplier_id']);
        $supplier_name = $supplier_name_result ? $supplier_name_result->fetch_row()[0] : '';
        
        $notes = "Chi trả công nợ cho NCC '$supplier_name', phiếu nhập " . $current_import['input_code'];
        $payment_date = date('Y-m-d H:i:s');
        $type_id = 2; // Giả định 2 = Phiếu Chi

        $stmt_payment = $conn->prepare("INSERT INTO cms_payment (payment_code, input_id, type_id, payment_date, notes, total_money, user_init) VALUES (?, ?, ?, ?, ?, ?, ?)");
        $stmt_payment->bind_param("sisdsdi", $payment_code, $import_id, $type_id, $payment_date, $notes, $amount_to_pay, $user_id);
        $stmt_payment->execute();
        $stmt_payment->close();
        
        $conn->commit();
        echo json_encode(['status' => 'success', 'message' => 'Thanh toán nợ thành công!']);

    } catch (Exception $e) {
        $conn->rollback();
        echo json_encode(['status' => 'error', 'message' => 'Lỗi trong quá trình xử lý: ' . $e->getMessage()]);
    }
    exit();
}

// MẶC ĐỊNH: LẤY DỮ LIỆU DANH SÁCH NHÀ CUNG CẤP
// ... code này giữ nguyên, không thay đổi ...
$draw = isset($_POST['draw']) ? intval($_POST['draw']) : 0;
$start = isset($_POST['start']) ? intval($_POST['start']) : 0;
$length = isset($_POST['length']) ? intval($_POST['length']) : 10;
$search_term = $_POST['search_term'] ?? '';
$baseQuery = "FROM cms_suppliers s";
$whereClauses = [];
$params = [];
$types = '';
if (!empty($search_term)) {
    $whereClauses[] = "(s.supplier_code LIKE ? OR s.supplier_name LIKE ? OR s.supplier_phone LIKE ?)";
    $searchTermWildcard = "%" . $search_term . "%";
    array_push($params, $searchTermWildcard, $searchTermWildcard, $searchTermWildcard);
    $types .= 'sss';
}
$whereSql = count($whereClauses) > 0 ? " WHERE " . implode(" AND ", $whereClauses) : "";
$totalRecordsResult = $conn->query("SELECT COUNT(ID) FROM cms_suppliers");
$totalRecords = $totalRecordsResult ? $totalRecordsResult->fetch_row()[0] : 0;
$queryFiltered = "SELECT COUNT(s.ID) as total " . $baseQuery . $whereSql;
$stmtFiltered = $conn->prepare($queryFiltered);
if ($stmtFiltered) {
    if (!empty($types)) { $stmtFiltered->bind_param($types, ...$params); }
    $stmtFiltered->execute();
    $result = $stmtFiltered->get_result();
    $totalFiltered = $result ? $result->fetch_assoc()['total'] : 0;
    $stmtFiltered->close();
} else {
    $totalFiltered = $totalRecords;
}

$data = [];
$dataQuery = "SELECT s.ID, s.supplier_code, s.supplier_name, s.supplier_phone, s.supplier_addr, (SELECT MAX(i.input_date) FROM cms_input i WHERE i.supplier_id = s.ID) as last_import_date, (SELECT SUM(i.total_price) FROM cms_input i WHERE i.supplier_id = s.ID) as total_purchase, (SELECT SUM(i.lack) FROM cms_input i WHERE i.supplier_id = s.ID) as total_debt FROM cms_suppliers s" . $whereSql . " ORDER BY s.supplier_name ASC LIMIT ?, ?";
$stmtData = $conn->prepare($dataQuery);
if ($stmtData) {
    $current_types = $types . 'ii';
    $current_params = array_merge($params, [$start, $length]);
    if (!empty($current_types)) { $stmtData->bind_param($current_types, ...$current_params); }
    $stmtData->execute();
    $result = $stmtData->get_result();
    if ($result) { while($row = $result->fetch_assoc()) { $data[] = $row; } }
    $stmtData->close();
}
$response = ["draw" => $draw, "recordsTotal" => intval($totalRecords), "recordsFiltered" => intval($totalFiltered), "data" => $data];
echo json_encode($response);
$conn->close();