"use client";

// Manuel 24'lük listenin coğrafyası: tablodan "+" ile eklenen her programın
// üniversitesi gerçek kampüs konumunda risk renkli pinlenir. Liste store'una
// abonedir; ekleme/çıkarma/sürükleme anında haritaya yansır.

import { useMemo, useState } from "react";
import { TercihHaritasi, type HaritaPin } from "@/features/liste/components/tercih-haritasi";
import { ilKonum, uniAdiNormalize, uniKonum } from "@/lib/harita";
import type { RiskSeviyesi } from "@/lib/risk";
import { useManuelListe } from "../liste-store";

// Aynı üniversitede birden çok tercih varsa pinde kötü risk baskın olsun
const RISK_AGIRLIK: Record<RiskSeviyesi, number> = {
  guvenli: 0,
  "az-riskli": 1,
  riskli: 2,
};

export function ManuelHarita() {
  const liste = useManuelListe();
  const [seciliIl, setSeciliIl] = useState<string | null>(null);

  const { pinler, haritaDisi } = useMemo(() => {
    const gruplar = new Map<string, HaritaPin>();
    let haritaDisi = 0;

    liste.forEach((t, i) => {
      const konum = uniKonum(t.universite, t.il) ?? ilKonum(t.il);
      if (!konum) {
        haritaDisi += 1;
        return;
      }
      const risk = t.risk ?? "az-riskli";
      const key = `${uniAdiNormalize(t.universite)}|${t.il ?? ""}`;
      const mevcut = gruplar.get(key);
      if (mevcut) {
        mevcut.tercihSiralari.push(i + 1);
        if (RISK_AGIRLIK[risk] > RISK_AGIRLIK[mevcut.risk]) mevcut.risk = risk;
      } else {
        gruplar.set(key, {
          id: key,
          universite: t.universite,
          il: t.il,
          x: konum.x,
          y: konum.y,
          tercihSiralari: [i + 1],
          risk,
        });
      }
    });

    return { pinler: [...gruplar.values()], haritaDisi };
  }, [liste]);

  return (
    <div>
      <TercihHaritasi
        pinler={pinler}
        seciliIl={seciliIl}
        onSeciliIlDegisti={setSeciliIl}
      />
      {haritaDisi > 0 ? (
        <p className="mt-1 px-1 text-xs text-slate-500">
          {haritaDisi} tercih harita dışında (KKTC vb.)
        </p>
      ) : null}
      {liste.length === 0 ? (
        <p className="mt-2 text-center text-xs text-slate-500">
          Tablodan <span aria-hidden>＋</span> ile ekledikçe üniversiteler
          haritada belirir.
        </p>
      ) : null}
    </div>
  );
}
