<?php
session_start();
require_once '../config/database.php';
require_once '../includes/auth.php';
require_once '../includes/functions.php';

header('Content-Type: application/json');

if (!isLoggedIn()) {
    jsonResponse(false, 'Unauthorized');
}

requireAdmin();

$action = $_POST['action'] ?? $_GET['action'] ?? '';

switch ($action) {
    case 'get_pengeluaran':
        getPengeluaran();
        break;
    
    case 'add_pengeluaran':
        addPengeluaran();
        break;
    
    case 'update_pengeluaran':
        updatePengeluaran();
        break;
    
    case 'delete_pengeluaran':
        deletePengeluaran();
        break;
    
    default:
        jsonResponse(false, 'Invalid action');
}

function getPengeluaran() {
    try {
        $dari = clean($_GET['dari'] ?? '');
        $sampai = clean($_GET['sampai'] ?? '');
        $search = clean($_GET['search'] ?? '');
        
        $sql = "SELECT p.*, u.nama as petugas 
                FROM pengeluaran p 
                JOIN users u ON p.id_user = u.id 
                WHERE 1=1";
        
        $params = [];
        $types = '';
        
        if (!empty($dari)) {
            $sql .= " AND p.tanggal >= ?";
            $params[] = $dari;
            $types .= 's';
        }
        
        if (!empty($sampai)) {
            $sql .= " AND p.tanggal <= ?";
            $params[] = $sampai;
            $types .= 's';
        }
        
        if (!empty($search)) {
            $sql .= " AND (p.kategori LIKE ? OR p.deskripsi LIKE ?)";
            $searchTerm = "%$search%";
            $params[] = $searchTerm;
            $params[] = $searchTerm;
            $types .= 'ss';
        }
        
        $sql .= " ORDER BY p.tanggal DESC, p.created_at DESC";
        
        $result = query($sql, $params, $types);
        $pengeluaran = [];
        while ($row = $result->fetch_assoc()) {
            $pengeluaran[] = $row;
        }
        
        jsonResponse(true, 'Success', $pengeluaran);
    } catch (Exception $e) {
        jsonResponse(false, $e->getMessage());
    }
}

function addPengeluaran() {
    try {
        $tanggal = clean($_POST['tanggal'] ?? '');
        $kategori = clean($_POST['kategori'] ?? '');
        $deskripsi = clean($_POST['deskripsi'] ?? '');
        $nominal = floatval($_POST['nominal'] ?? 0);
        $user_id = $_SESSION['user_id'];
        
        if (empty($tanggal) || empty($kategori) || $nominal <= 0) {
            jsonResponse(false, 'Data tidak lengkap');
        }
        
        $sql = "INSERT INTO pengeluaran (tanggal, kategori, deskripsi, nominal, id_user) 
                VALUES (?, ?, ?, ?, ?)";
        insert($sql, [$tanggal, $kategori, $deskripsi, $nominal, $user_id], 'sssdi');
        
        jsonResponse(true, 'Pengeluaran berhasil ditambahkan');
    } catch (Exception $e) {
        jsonResponse(false, $e->getMessage());
    }
}

function updatePengeluaran() {
    try {
        $id = intval($_POST['id'] ?? 0);
        $tanggal = clean($_POST['tanggal'] ?? '');
        $kategori = clean($_POST['kategori'] ?? '');
        $deskripsi = clean($_POST['deskripsi'] ?? '');
        $nominal = floatval($_POST['nominal'] ?? 0);
        
        if ($id <= 0 || empty($tanggal) || empty($kategori) || $nominal <= 0) {
            jsonResponse(false, 'Data tidak lengkap');
        }
        
        $sql = "UPDATE pengeluaran SET tanggal = ?, kategori = ?, deskripsi = ?, nominal = ? WHERE id = ?";
        execute($sql, [$tanggal, $kategori, $deskripsi, $nominal, $id], 'sssdi');
        
        jsonResponse(true, 'Pengeluaran berhasil diupdate');
    } catch (Exception $e) {
        jsonResponse(false, $e->getMessage());
    }
}

function deletePengeluaran() {
    try {
        $id = intval($_POST['id'] ?? 0);
        
        if ($id <= 0) {
            jsonResponse(false, 'ID tidak valid');
        }
        
        $sql = "DELETE FROM pengeluaran WHERE id = ?";
        execute($sql, [$id], 'i');
        
        jsonResponse(true, 'Pengeluaran berhasil dihapus');
    } catch (Exception $e) {
        jsonResponse(false, $e->getMessage());
    }
}
?>
