import type { RequestHandler } from './$types';
import {
	centrawarungBadRequest,
	centrawarungJson,
	centrawarungOptionsResponse,
	centrawarungServerError,
	ensureKodeposDataAvailable,
	getKabupatenParam,
	guardCentrawarungGet
} from '$lib/server/centrawarung-api';
import { getKelurahanByKecamatan } from '$lib/server/referensi';

export const GET: RequestHandler = async (event) => {
	const authError = await guardCentrawarungGet(event);
	if (authError) return authError;

	const kodeposError = await ensureKodeposDataAvailable();
	if (kodeposError) return kodeposError;

	const provinsi = event.url.searchParams.get('provinsi')?.trim();
	const kabupaten = getKabupatenParam(event.url);
	const kecamatan = event.url.searchParams.get('kecamatan')?.trim();

	if (!provinsi || !kabupaten || !kecamatan) {
		return centrawarungBadRequest(
			'Parameter provinsi, kabupaten (atau kota), dan kecamatan wajib diisi.'
		);
	}

	try {
		const rows = await getKelurahanByKecamatan(provinsi, kabupaten, kecamatan);
		const data = rows.map((row) => ({
			id: row.id,
			nama: row.nama,
			kelurahan: row.nama,
			kode_pos: row.kode_pos,
			kodepos: row.kode_pos
		}));

		return centrawarungJson({
			success: true,
			provinsi,
			kabupaten,
			kecamatan,
			total: data.length,
			data
		});
	} catch {
		return centrawarungServerError('Gagal mengambil data kelurahan.');
	}
};

export const OPTIONS: RequestHandler = async () => centrawarungOptionsResponse();
