<?php
include '../koneksi.php';

// Parameter dari DataTables
$draw = isset($_POST['draw']) ? intval($_POST['draw']) : 1;
$start = isset($_POST['start']) ? intval($_POST['start']) : 0;
$length = isset($_POST['length']) ? intval($_POST['length']) : 50;
$searchValue = isset($_POST['search']['value']) ? mysqli_real_escape_string($koneksi, $_POST['search']['value']) : '';
$orderColumn = isset($_POST['order'][0]['column']) ? intval($_POST['order'][0]['column']) : 0;
$orderDir = isset($_POST['order'][0]['dir']) ? mysqli_real_escape_string($koneksi, $_POST['order'][0]['dir']) : 'desc';

// Parameter filter
$tanggal_dari = isset($_POST['tanggal_dari']) ? mysqli_real_escape_string($koneksi, $_POST['tanggal_dari']) : '';
$tanggal_sampai = isset($_POST['tanggal_sampai']) ? mysqli_real_escape_string($koneksi, $_POST['tanggal_sampai']) : '';
$filter_kategori = isset($_POST['filter_kategori']) ? intval($_POST['filter_kategori']) : 0;
$filter_jenis = isset($_POST['filter_jenis']) ? mysqli_real_escape_string($koneksi, $_POST['filter_jenis']) : '';

// Mapping kolom untuk ordering (sesuai dengan struktur tabel)
$columns = array(
    0 => 'transaksi_id',
    1 => 'transaksi_tanggal',
    2 => 'kategori',
    3 => 'transaksi_keterangan',
    4 => 'transaksi_jenis',
    5 => 'transaksi_nominal'
);

$orderBy = isset($columns[$orderColumn]) ? $columns[$orderColumn] : 'transaksi_id';
$orderBy = ($orderBy == 'transaksi_id') ? 'transaksi_id' : $orderBy;

// Query untuk total records
$queryTotal = "SELECT COUNT(*) as total FROM transaksi t INNER JOIN kategori k ON k.kategori_id = t.transaksi_kategori";
$resultTotal = mysqli_query($koneksi, $queryTotal);
$totalRecords = mysqli_fetch_assoc($resultTotal)['total'];

// Query untuk filtered records (dengan search dan filter)
$queryFiltered = "SELECT COUNT(*) as total FROM transaksi t INNER JOIN kategori k ON k.kategori_id = t.transaksi_kategori WHERE 1=1";

// Filter tanggal
if (!empty($tanggal_dari)) {
    $queryFiltered .= " AND DATE(t.transaksi_tanggal) >= '$tanggal_dari'";
}
if (!empty($tanggal_sampai)) {
    $queryFiltered .= " AND DATE(t.transaksi_tanggal) <= '$tanggal_sampai'";
}

// Filter kategori
if ($filter_kategori > 0) {
    $queryFiltered .= " AND t.transaksi_kategori = $filter_kategori";
}

// Filter jenis transaksi
if (!empty($filter_jenis)) {
    $queryFiltered .= " AND t.transaksi_jenis = '$filter_jenis'";
}

// Search
if (!empty($searchValue)) {
    $queryFiltered .= " AND (
        t.transaksi_tanggal LIKE '%$searchValue%' OR
        k.kategori LIKE '%$searchValue%' OR
        t.transaksi_keterangan LIKE '%$searchValue%' OR
        t.transaksi_jenis LIKE '%$searchValue%' OR
        t.transaksi_nominal LIKE '%$searchValue%'
    )";
}
$resultFiltered = mysqli_query($koneksi, $queryFiltered);
$filteredRecords = mysqli_fetch_assoc($resultFiltered)['total'];

// Query untuk data dengan pagination
$query = "SELECT t.*, k.kategori 
          FROM transaksi t 
          INNER JOIN kategori k ON k.kategori_id = t.transaksi_kategori 
          WHERE 1=1";

// Filter tanggal
if (!empty($tanggal_dari)) {
    $query .= " AND DATE(t.transaksi_tanggal) >= '$tanggal_dari'";
}
if (!empty($tanggal_sampai)) {
    $query .= " AND DATE(t.transaksi_tanggal) <= '$tanggal_sampai'";
}

// Filter kategori
if ($filter_kategori > 0) {
    $query .= " AND t.transaksi_kategori = $filter_kategori";
}

// Filter jenis transaksi
if (!empty($filter_jenis)) {
    $query .= " AND t.transaksi_jenis = '$filter_jenis'";
}

// Search
if (!empty($searchValue)) {
    $query .= " AND (
        t.transaksi_tanggal LIKE '%$searchValue%' OR
        k.kategori LIKE '%$searchValue%' OR
        t.transaksi_keterangan LIKE '%$searchValue%' OR
        t.transaksi_jenis LIKE '%$searchValue%' OR
        t.transaksi_nominal LIKE '%$searchValue%'
    )";
}

$query .= " ORDER BY $orderBy $orderDir LIMIT $start, $length";

$result = mysqli_query($koneksi, $query);

$data = array();
$no = $start + 1;

while ($row = mysqli_fetch_assoc($result)) {
    $pemasukan = ($row['transaksi_jenis'] == 'Pemasukan') ? "Rp. " . number_format($row['transaksi_nominal'], 0, ',', '.') . " ,-" : "-";
    $pengeluaran = ($row['transaksi_jenis'] == 'Pengeluaran') ? "Rp. " . number_format($row['transaksi_nominal'], 0, ',', '.') . " ,-" : "-";
    
    // Tombol aksi (untuk manajemen hanya lihat)
    $aksi = '
        <button type="button" class="btn btn-danger btn-sm btn-lihat" 
                data-foto="' . $row['transaksi_foto'] . '"
                data-toggle="modal" data-target="#modalLihat">
            <i class="fa fa-eye"></i>
        </button>
    ';
    
    $data[] = array(
        $no++,
        date('d-m-Y', strtotime($row['transaksi_tanggal'])),
        $row['kategori'],
        $row['transaksi_keterangan'],
        $pemasukan,
        $pengeluaran,
        $aksi
    );
}

// Response JSON untuk DataTables
$response = array(
    "draw" => $draw,
    "recordsTotal" => intval($totalRecords),
    "recordsFiltered" => intval($filteredRecords),
    "data" => $data
);

header('Content-Type: application/json');
echo json_encode($response);
?>
