<?php
// rekap_mitra.php

// ----------------------------------------------------------------------
// 1. KONEKSI DATABASE & FUNGSI UTILITY DASAR
// ----------------------------------------------------------------------
include_once 'config/koneksi.php';

// Fungsi untuk mendapatkan ID Tahun Aktif Default
if (!function_exists('getTahunAktifId')) {
    function getTahunAktifId($conn) {
        $sql = "SELECT id FROM tahun_aktif WHERE is_aktif = 1 LIMIT 1";
        $result = $conn->query($sql);
        if ($result && $result->num_rows > 0) {
            return $result->fetch_assoc()['id'];
        }
        // Fallback jika tidak ada tahun aktif, ambil tahun terbaru
        $sql_fallback = "SELECT id FROM tahun_aktif ORDER BY tahun DESC LIMIT 1";
        $result_fallback = $conn->query($sql_fallback);
        return ($result_fallback && $result_fallback->num_rows > 0) ? $result_fallback->fetch_assoc()['id'] : 0;
    }
}

// ----------------------------------------------------------------------
// 2. INISIALISASI FILTER DAN PENGURUTAN
// ----------------------------------------------------------------------

// Mendapatkan ID Tahun Aktif Default
$default_tahun_aktif_id = getTahunAktifId($conn);

// Filter Tahun: Ambil dari GET atau gunakan tahun aktif default
$filter_tahun_id = isset($_GET['tahun_id']) ? (int)$_GET['tahun_id'] : $default_tahun_aktif_id; 

// Filter Aktivitas & Bulan
$filter_nama_aktivitas_id = isset($_GET['nama_aktivitas_id']) ? (int)$_GET['nama_aktivitas_id'] : 0;
$filter_bulan = isset($_GET['bulan']) ? $_GET['bulan'] : ''; // Format YYYY-MM
$sort_by = isset($_GET['sort']) ? $_GET['sort'] : 'nama_mitra'; 
$sort_order = isset($_GET['order']) && strtoupper($_GET['order']) === 'DESC' ? 'DESC' : 'ASC';

// Kolom Sorting yang valid
$valid_sort_columns = [
    'nama_mitra', 
    'nama_aktivitas_master', 
    'beban_kerja', 
    'jumlah_honor', 
    'tgl_mulai' // Kolom untuk sorting periode
];

if (!in_array($sort_by, $valid_sort_columns)) {
    $sort_by = 'nama_mitra';
}

// Fungsi untuk mendapatkan link sorting
function get_sort_link($column, $current_sort, $current_order, $tahun_id, $aktivitas_id, $bulan) {
    $new_order = ($current_sort == $column && $current_order == 'ASC') ? 'DESC' : 'ASC';
    // Gunakan 'numeric' untuk tgl_mulai agar ikonnya sesuai
    $icon_type = in_array($column, ['nama_mitra', 'nama_aktivitas_master']) ? 'alpha' : 'numeric';
    $icon = "bi bi-sort-{$icon_type}-down" . (($current_sort == $column) ? ($current_order == 'ASC' ? '-alt' : '') : '');
    
    $query_string = http_build_query([
        'tahun_id' => $tahun_id, 
        'nama_aktivitas_id' => $aktivitas_id,
        'bulan' => $bulan,
        'sort' => $column,
        'order' => $new_order
    ]);
    
    $column_display = str_replace(['_id', '_'], [' ID', ' '], $column);
    // Khusus untuk tgl_mulai, beri nama yang lebih sesuai
    if ($column === 'tgl_mulai') {
        $column_display = 'Periode Aktivitas';
    } else {
        $column_display = ucwords($column_display);
    }
    
    return "<a class='text-white text-decoration-none' href='?{$query_string}'>{$column_display} <i class='{$icon}'></i></a>";
}

// ----------------------------------------------------------------------
// 3. PENGAMBILAN DATA UNTUK DROPDOWN FILTER
// ----------------------------------------------------------------------

// Ambil Daftar Tahun
$tahun_list_query = "
    SELECT id, tahun AS nama_tahun
    FROM tahun_aktif
    ORDER BY tahun DESC
";
$tahun_list_result = $conn->query($tahun_list_query);

// Ambil daftar Nama Aktivitas (Difilter berdasarkan TAHUN yang dipilih)
$aktivitas_list_query = "
    SELECT NAM.id, NAM.nama_aktivitas
    FROM nama_aktivitas_master NAM
    JOIN detail_kegiatan DK ON NAM.detail_kegiatan_id = DK.id
    JOIN subkomponen SK ON DK.subkomponen_id = SK.id
    WHERE SK.tahun_aktif_id = ?
    ORDER BY NAM.nama_aktivitas ASC
";
$stmt_aktivitas = $conn->prepare($aktivitas_list_query);
$stmt_aktivitas->bind_param("i", $filter_tahun_id);
$stmt_aktivitas->execute();
$aktivitas_list_result = $stmt_aktivitas->get_result();
$stmt_aktivitas->close();


// Ambil daftar Bulan (Global, dari semua aktivitas)
$bulan_list_query = "
    SELECT DISTINCT DATE_FORMAT(tgl, '%Y-%m') AS bulan_tahun
    FROM (
        SELECT tgl_mulai AS tgl FROM nama_aktivitas_master
        UNION
        SELECT tgl_selesai AS tgl FROM nama_aktivitas_master
    ) AS T
    WHERE T.tgl IS NOT NULL AND T.tgl != '0000-00-00'
    ORDER BY bulan_tahun DESC
";
$bulan_list_result = $conn->query($bulan_list_query);


// ----------------------------------------------------------------------
// 4. PEMBANGUNAN QUERY REKAP UTAMA
// ----------------------------------------------------------------------

$sql = "
    SELECT
        AK.id AS aktivitas_id,
        M.nama AS nama_mitra,
        NAM.nama_aktivitas AS nama_aktivitas_master,
        NAM.tgl_mulai,
        NAM.tgl_selesai,
        AK.beban_kerja,
        AK.jumlah_honor
    FROM
        aktivitas_kerja AK
    LEFT JOIN mitra M ON AK.mitra_id = M.id
    LEFT JOIN nama_aktivitas_master NAM ON AK.nama_aktivitas_id = NAM.id
    LEFT JOIN detail_kegiatan DK ON NAM.detail_kegiatan_id = DK.id
    LEFT JOIN subkomponen SK ON DK.subkomponen_id = SK.id
    LEFT JOIN tahun_aktif TA ON SK.tahun_aktif_id = TA.id
    WHERE 1=1
";

$params = [];
$types = '';

// KLAUSA FILTER: TAHUN (Wajib)
if ($filter_tahun_id > 0) {
    $sql .= " AND TA.id = ?";
    $types .= 'i';
    $params[] = $filter_tahun_id;
}

// KLAUSA FILTER: Nama Aktivitas
if ($filter_nama_aktivitas_id > 0) {
    $sql .= " AND NAM.id = ?";
    $types .= 'i';
    $params[] = $filter_nama_aktivitas_id;
}

// KLAUSA FILTER: Bulan
if (!empty($filter_bulan)) {
    $sql .= " AND (DATE_FORMAT(NAM.tgl_mulai, '%Y-%m') = ? OR DATE_FORMAT(NAM.tgl_selesai, '%Y-%m') = ?)";
    $types .= 'ss';
    $params[] = $filter_bulan;
    $params[] = $filter_bulan;
}

// ORDER BY menggunakan kolom tgl_mulai jika user memilih sort periode
$sql .= " ORDER BY " . $sort_by . " " . $sort_order;

$stmt = $conn->prepare($sql);

if (!empty($params)) {
    $stmt->bind_param($types, ...$params);
}

$stmt->execute();
$rekap_list = $stmt->get_result();

// Ambil nama tahun yang dipilih untuk ditampilkan di header
$selected_year_name = 'Tahun Tidak Dikenal';
$stmt_year = $conn->prepare("SELECT tahun FROM tahun_aktif WHERE id = ?");
$stmt_year->bind_param("i", $filter_tahun_id);
$stmt_year->execute();
$result_year = $stmt_year->get_result();
if ($result_year && $result_year->num_rows > 0) {
    $selected_year_name = $result_year->fetch_assoc()['tahun'];
}
$stmt_year->close();


// ----------------------------------------------------------------------
// 5. TAMPILAN HTML (Body Content)
// ----------------------------------------------------------------------
include_once 'header.php';
?>

<div class="container mt-5">
    <h2><i class="bi bi-clipboard-data"></i> Rekap Aktivitas Mitra</h2>
    <p class="text-muted">Laporan aktivitas yang difilter berdasarkan Nama Aktivitas, Tahun, dan Periode Waktu.</p>
    <hr>

   
    <div class="card p-3 mb-4 shadow-sm">
        <form method="GET" action="rekap_mitra.php">
            <div class="row g-3 align-items-end">

                <div class="col-md-3">
                    <label for="filter_tahun" class="form-label fw-bold">Filter Tahun Kegiatan:</label>
                    <select name="tahun_id" id="filter_tahun" class="form-select" onchange="this.form.submit()">
                        <?php 
                        // Reset pointer hasil query tahun
                        if ($tahun_list_result && $tahun_list_result->num_rows > 0) {
                            $tahun_list_result->data_seek(0);
                        }
                        while ($thn = $tahun_list_result->fetch_assoc()): ?>
                            <option value="<?php echo $thn['id']; ?>" <?php echo ($filter_tahun_id == $thn['id']) ? 'selected' : ''; ?>>
                                <?php echo htmlspecialchars($thn['nama_tahun']) . (($thn['id'] == $default_tahun_aktif_id) ? ' (Aktif)' : ''); ?>
                            </option>
                        <?php endwhile; ?>
                    </select>
                </div>

                <div class="col-md-3">
                    <label for="filter_aktivitas" class="form-label fw-bold">Filter Nama Aktivitas:</label>
                    <select name="nama_aktivitas_id" id="filter_aktivitas" class="form-select">
                        <option value="0">-- Semua Aktivitas Tahun <?php echo $selected_year_name; ?> --</option>
                        <?php 
                        // Reset pointer hasil query aktivitas
                        if ($aktivitas_list_result && $aktivitas_list_result->num_rows > 0) {
                            $aktivitas_list_result->data_seek(0);
                        }
                        while ($akt = $aktivitas_list_result->fetch_assoc()): ?>
                            <option value="<?php echo $akt['id']; ?>" <?php echo ($filter_nama_aktivitas_id == $akt['id']) ? 'selected' : ''; ?>>
                                <?php echo htmlspecialchars($akt['nama_aktivitas']); ?>
                            </option>
                        <?php endwhile; ?>
                    </select>
                </div>

                <div class="col-md-3">
                    <label for="filter_bulan" class="form-label fw-bold">Filter Bulan:</label>
                    <select name="bulan" id="filter_bulan" class="form-select">
                        <option value="">-- Semua Bulan --</option>
                        <?php 
                        // Reset pointer hasil query bulan
                        if ($bulan_list_result && $bulan_list_result->num_rows > 0) {
                            $bulan_list_result->data_seek(0);
                        }
                        while ($bln = $bulan_list_result->fetch_assoc()): ?>
                            <option value="<?php echo $bln['bulan_tahun']; ?>" <?php echo ($filter_bulan == $bln['bulan_tahun']) ? 'selected' : ''; ?>>
                                <?php 
                                echo date('F Y', strtotime($bln['bulan_tahun'] . '-01')); 
                                ?>
                            </option>
                        <?php endwhile; ?>
                    </select>
                </div>

                <div class="col-md-3">
                    <label class="form-label fw-bold w-100" style="visibility: hidden;">Aksi Tombol</label>
                    <div class="d-flex align-items-center">
                        <button type="submit" class="btn btn-primary"><i class="bi bi-funnel"></i> Terapkan Filter</button>
                        <a href="rekap_mitra.php" class="btn btn-secondary ms-2"><i class="bi bi-x-circle"></i> Reset</a>
                    </div>
                </div>
            </div>
        </form>
    </div>

    
    <div class="table-responsive">
        <table class="table table-bordered table-striped table-hover align-middle">
            <thead class="table-dark">
                <tr>
                    <th><?php echo get_sort_link('nama_mitra', $sort_by, $sort_order, $filter_tahun_id, $filter_nama_aktivitas_id, $filter_bulan); ?></th>
                    <th><?php echo get_sort_link('nama_aktivitas_master', $sort_by, $sort_order, $filter_tahun_id, $filter_nama_aktivitas_id, $filter_bulan); ?></th>
                    <th><?php echo get_sort_link('tgl_mulai', $sort_by, $sort_order, $filter_tahun_id, $filter_nama_aktivitas_id, $filter_bulan); ?></th>
                    <th class="text-end"><?php echo get_sort_link('beban_kerja', $sort_by, $sort_order, $filter_tahun_id, $filter_nama_aktivitas_id, $filter_bulan); ?></th>
                    <th class="text-end"><?php echo get_sort_link('jumlah_honor', $sort_by, $sort_order, $filter_tahun_id, $filter_nama_aktivitas_id, $filter_bulan); ?></th>
                </tr>
            </thead>
            <tbody>
                <?php if ($rekap_list && $rekap_list->num_rows > 0): ?>
                    <?php while ($row = $rekap_list->fetch_assoc()): ?>
                        <tr>
                            <td><?php echo htmlspecialchars($row['nama_mitra']); ?></td>
                            <td><?php echo htmlspecialchars($row['nama_aktivitas_master']); ?></td>
                            <td><?php echo date('d-m-Y', strtotime($row['tgl_mulai'])) . ' s/d ' . date('d-m-Y', strtotime($row['tgl_selesai'])); ?></td>
                            <td class="text-end"><?php echo number_format($row['beban_kerja'], 2); ?></td>
                            <td class="text-end">Rp <?php echo number_format($row['jumlah_honor'], 0, ',', '.'); ?></td>
                        </tr>
                    <?php endwhile; ?>
                <?php else: ?>
                    <tr>
                        <td colspan="5" class="text-center py-4"> <i class="bi bi-info-circle-fill me-2"></i> Tidak ada data aktivitas yang ditemukan di tahun <?php echo $selected_year_name; ?> dengan kriteria filter tersebut.
                        </td>
                    </tr>
                <?php endif; ?>
            </tbody>
        </table>
    </div>
</div>

<?php 
$stmt->close();
include_once 'footer.php'; 
?>