import { tkgm } from '@/lib/tkgm';
import { prisma } from '@/lib/db';
import { rateLimit, clientIp } from '@/lib/http';
import { namesOfMahalle } from '@/lib/idari';
type F = { geometry: { coordinates: number[][][] }; properties: Record<string, string | number> };
export const dynamic = 'force-dynamic';
export async function GET(req: Request) {
  const u = new URL(req.url);
  const m = Number(u.searchParams.get('mahalleId')), a = Number(u.searchParams.get('ada')), p = Number(u.searchParams.get('parsel'));
  if (!m || !Number.isFinite(a) || !p) return Response.json({ error: 'Eksik bilgi' }, { status: 400 });
  const key = `${m}/${a}/${p}`;
  // 1) Kalıcı önbellek: aynı parsel bir daha TKGM'ye sorulmaz
  const hit = await prisma.parcelCache.findUnique({ where: { key } }).catch(() => null);
  const fix = <T extends object>(d: T) => ({ ...d, ...(namesOfMahalle(m) ?? {}) }); // ı/İ düzeltmeli adlar
  if (hit) { prisma.parcelCache.update({ where: { key }, data: { hits: { increment: 1 } } }).catch(() => {}); return Response.json(fix(hit.data as object)); }
  if (!await rateLimit(`tkgmp:${clientIp(req.headers)}`, 30, 600_000)) return Response.json({ error: 'Çok fazla sorgu, biraz bekleyin' }, { status: 429 });
  try {
    const f = await tkgm<F>(`parsel/${m}/${a}/${p}`);
    if (!f?.geometry) return Response.json({ error: 'Parsel bulunamadı' }, { status: 404 });
    const pr = f.properties;
    const data = {
      geometry: f.geometry,
      il: pr.ilAd, ilce: pr.ilceAd, mahalle: pr.mahalleAd, mevkii: pr.mevkii, nitelik: String(pr.nitelik || '').trim(), pafta: pr.pafta,
      ada: pr.adaNo, parsel: pr.parselNo, zemin: String(pr.zeminKmdurum || ''), alan: parseFloat(String(pr.alan || '0').replace(/\./g, '').replace(',', '.')),
    };
    await prisma.parcelCache.upsert({ where: { key }, create: { key, data, source: 'server' }, update: {} }).catch(() => {});
    return Response.json(fix(data));
  } catch (e) {
    const s = (e as { status?: number }).status === 404 ? 404 : 502;
    return Response.json({ error: s === 404 ? 'Parsel bulunamadı' : 'TKGM şu an yanıt vermiyor' }, { status: s });
  }
}
