<?php
// get_mitra_by_distance.php (perbaikan: filter berdasarkan tahun_aktif_id, hapus typo)
header('Content-Type: application/json');
include_once 'config/koneksi.php';
session_start();

$desa_id = isset($_GET['desa_id']) ? trim($_GET['desa_id']) : '';

// --- 1) Tentukan tahun aktif: dari session dulu, lalu fallback ke DB ---
$tahunAktif = isset($_SESSION['tahun_aktif_id']) && intval($_SESSION['tahun_aktif_id']) > 0
    ? intval($_SESSION['tahun_aktif_id'])
    : null;

if (!$tahunAktif) {
    $q = $conn->query("SELECT id FROM tahun_aktif WHERE is_aktif = 1 LIMIT 1");
    if ($q && $q->num_rows > 0) {
        $row = $q->fetch_assoc();
        $tahunAktif = intval($row['id']);
    }
}

// Jika masih belum ketemu tahun aktif, batalkan (atau ubah sesuai kebijakanmu)
// Di sini aku kembalikan array kosong supaya caller tahu tidak ada data karena tahun aktif tidak diketahui.
if (!$tahunAktif) {
    echo json_encode([]);
    exit;
}

// --- 2) Ambil koordinat desa (jika ada) ---
$lat = null;
$lng = null;
if ($desa_id !== '') {
    $sql = "SELECT latitude, longitude FROM wilayahtugas WHERE id = ? LIMIT 1";
    if ($stmt = $conn->prepare($sql)) {
        $stmt->bind_param("s", $desa_id);
        $stmt->execute();
        $res = $stmt->get_result();
        if ($res && $row = $res->fetch_assoc()) {
            $lat = $row['latitude'];
            $lng = $row['longitude'];
        }
        $stmt->close();
    }
}

$data = [];

/* ----------------------------------------
   Jika desa tidak punya koordinat → urut A–Z
   (tetap FILTER berdasarkan tahun_aktif_id)
------------------------------------------*/
if ($lat === null || $lng === null || $lat == 0 || $lng == 0) {

    $sql2 = "
        SELECT 
            id,
            nama,
            latitude,
            longitude,
            NULL AS jarak
        FROM mitra
        WHERE tahun_aktif_id = ?
        ORDER BY nama ASC
        LIMIT 2000
    ";

    if ($stmt2 = $conn->prepare($sql2)) {
        $stmt2->bind_param("i", $tahunAktif);
        $stmt2->execute();
        $res2 = $stmt2->get_result();
        while ($r = $res2->fetch_assoc()) {
            // tampilkan jarak sebagai null supaya frontend bisa tulis 'Tidak Ada Koordinat'
            $r['jarak'] = null;
            $data[] = $r;
        }
        $stmt2->close();
    }

    echo json_encode($data);
    exit;
}

/* ----------------------------------------
   Desa punya koordinat → hitung jarak Haversine
   Filter tetap berdasarkan tahun_aktif_id
------------------------------------------*/
$sql_mitra = "
    SELECT 
        m.id,
        m.nama,
        m.latitude,
        m.longitude,
        CASE 
            WHEN m.latitude IS NULL OR m.longitude IS NULL OR m.latitude = 0 OR m.longitude = 0
                THEN NULL
            ELSE (
                6371 * ACOS(
                    LEAST(1,
                        COS(RADIANS(?)) 
                        * COS(RADIANS(m.latitude)) 
                        * COS(RADIANS(m.longitude) - RADIANS(?))
                        + SIN(RADIANS(?)) 
                        * SIN(RADIANS(m.latitude))
                    )
                )
            )
        END AS jarak
    FROM mitra m
    WHERE m.tahun_aktif_id = ?
    ORDER BY 
        (m.latitude IS NULL OR m.longitude IS NULL OR m.latitude = 0 OR m.longitude = 0) ASC,
        jarak ASC,
        m.nama ASC
    LIMIT 2000
";

if ($stmt2 = $conn->prepare($sql_mitra)) {
    // parameter: lat (double), lng (double), lat (double), tahunAktif (int)
    $stmt2->bind_param("dddi", $lat, $lng, $lat, $tahunAktif);
    $stmt2->execute();
    $res2 = $stmt2->get_result();

    while ($r = $res2->fetch_assoc()) {
        if ($r['latitude'] === null || $r['longitude'] === null || $r['latitude'] == 0 || $r['longitude'] == 0) {
            $r['jarak'] = null;
        } else {
            $r['jarak'] = number_format(floatval($r['jarak']), 2);
        }
        $data[] = $r;
    }

    $stmt2->close();
}

echo json_encode($data);
