// okonomi.jsx — Økonomi: Supabase-datalag
// Henter regnskapsdata fra databasen og fyller de globale strukturene
// som okonomi-screens.jsx leser. INGEN Finago-API kobles her — alt
// kommer fra Supabase. Finago-integrasjon kommer senere.
//
// Lastes ETTER okonomi-screens.jsx. Overstyrer OkonomiWorkspace
// (mock heter nå OkonomiWorkspaceMock).

// ── Muter global array/objekt på plass (const-binding beholdes) ──
function okFyll(globalNavn, nyeData) {
  const mål = window[globalNavn];
  if (Array.isArray(mål)) {
    mål.length = 0;
    nyeData.forEach(x => mål.push(x));
  } else if (mål && typeof mål === 'object') {
    Object.keys(mål).forEach(k => delete mål[k]);
    Object.assign(mål, nyeData);
  }
}

async function okHentAlt() {
  const sb = window._sb;
  const [se, pl, av, ko, fl, le] = await Promise.all([
    sb.from('ok_selskaper').select('*').order('sortering'),
    sb.from('ok_konsern_pl').select('*').order('sortering'),
    sb.from('ok_avdelinger').select('*').order('sortering'),
    sb.from('ok_kostnadslinjer').select('*, avdeling:ok_avdelinger!avdeling_id(nokkel)').order('sortering'),
    sb.from('ok_flyttinger').select('*').order('opprettet_dato', { ascending: false }),
    sb.from('ok_lonnsendringer').select('*').order('created_at', { ascending: false }),
  ]);

  // Selskaper → OK_SELSKAPER
  const selskaper = (se.data || []).map(r => ({
    id: r.nokkel, navn: r.navn, kort: r.kort, orgnr: r.orgnr, type: r.type,
    eierandel: r.eierandel, ansatte: r.ansatte, brand: r.brand,
    inntekt: Number(r.inntekt), kostnad: Number(r.kostnad),
    resultat: Number(r.resultat), budsjettResultat: Number(r.budsjett_resultat),
  }));

  // P&L → OK_KONSERN_PL
  const pl_data = (pl.data || []).map(r => ({
    type: r.type, gruppe: r.gruppe,
    okm: Number(r.okm), okb: Number(r.okb), oks: Number(r.oks), okd: Number(r.okd),
    budsjett: Number(r.budsjett),
  }));

  // Avdelinger → OK_AVDELINGER
  const avdelinger = (av.data || []).map(r => ({
    id: r.nokkel, navn: r.navn, leder: r.leder_initialer, ansatte: r.ansatte,
    budsjettAr: Number(r.budsjett_ar), brukt: Number(r.brukt), accent: r.accent,
  }));

  // Kostnadslinjer → OK_LAMB_KOSTNADER (kun Lambertseter i prototypen)
  const lambKostnader = (ko.data || [])
    .filter(r => r.avdeling?.nokkel === 'avd-lamb')
    .map(r => ({
      id: r.id, konto: r.konto, gruppe: r.gruppe,
      plan: Number(r.plan), brukt: Number(r.brukt),
      finagoBilag: r.finago_bilag, manuellAlloc: r.manuell_alloc, trend: r.trend,
    }));

  // Flyttinger → OK_FLYTT
  const flyttinger = (fl.data || []).map(r => ({
    id: r.id, nr: r.nr, opprettet: r.opprettet_dato, opprettetAv: r.opprettet_av,
    fraAvd: r.fra_avd, tilAvd: r.til_avd, fraSelskap: r.fra_selskap, tilSelskap: r.til_selskap,
    konto: r.konto, kontoNavn: r.konto_navn, belop: Number(r.belop),
    begrunnelse: r.begrunnelse, referanse: r.referanse, status: r.status,
    avvisGrunn: r.avvis_grunn, godkjenningssti: r.godkjenningssti || [],
    finagoBilag: r.finago_bilag,
  }));

  // Lønnsendringer → OK_LONN_ENDRINGER
  const lonnsendringer = (le.data || []).map(r => ({
    id: r.nr || r.id, type: r.type, person: r.person_initialer, personNavn: r.person_navn,
    avd: r.avd, detalj: r.detalj, belop: r.belop != null ? Number(r.belop) : null,
    periode: r.periode, gjelderFra: r.gjelder_fra,
    rapportertAv: r.rapportert_av, rapportertTid: r.rapportert_tid,
    status: r.status, feilGrunn: r.feil_grunn,
    finagoOppgave: r.finago_oppgave, hrKvittering: r.hr_kvittering,
  }));

  return { selskaper, pl_data, avdelinger, lambKostnader, flyttinger, lonnsendringer };
}

// ── Ny OkonomiWorkspace med Supabase-data ────────────────────

function OkonomiWorkspace({ go }) {
  const [laster, setLaster] = React.useState(true);
  const [feil,   setFeil]   = React.useState(null);
  const [, force] = React.useState(0);

  React.useEffect(() => {
    let aktiv = true;
    okHentAlt().then(d => {
      if (!aktiv) return;
      okFyll('OK_SELSKAPER',      d.selskaper);
      okFyll('OK_KONSERN_PL',     d.pl_data);
      okFyll('OK_AVDELINGER',     d.avdelinger);
      okFyll('OK_LAMB_KOSTNADER', d.lambKostnader);
      okFyll('OK_FLYTT',          d.flyttinger);
      okFyll('OK_LONN_ENDRINGER', d.lonnsendringer);
      // Oppdater avledet nøkkeltall-objekt
      if (window.OK_LONN_KORENINGER) {
        window.OK_LONN_KORENINGER.apneEndringer = d.lonnsendringer.filter(e => e.status === 'klar' || e.status === 'feilet').length;
        window.OK_LONN_KORENINGER.ventendeHR    = d.lonnsendringer.filter(e => e.status === 'sendt-hr').length;
      }
      setLaster(false);
      force(n => n + 1);
    }).catch(e => { if (aktiv) { setFeil(e.message); setLaster(false); } });
    return () => { aktiv = false; };
  }, []);

  if (laster) return (
    <div className="ok-content__inner">
      <div style={{ padding: 64, textAlign: 'center', color: SK.soft, fontSize: 14 }}>Laster økonomidata…</div>
    </div>
  );

  if (feil) return (
    <div className="ok-content__inner">
      <div style={{ background:'#fcddde', border:'1px solid #f2545c', borderRadius:8, padding:'14px 18px', fontSize:13, color:'#8a1620', margin:'20px 0' }}>
        Kunne ikke laste økonomidata: {feil}
        <div style={{ marginTop:8, color:SK.soft }}>Har du kjørt <code>supabase-okonomi.sql</code> og <code>supabase-okonomi-seed.sql</code>? (Krever også at du har en økonomi-/leder-rolle pga RLS.)</div>
      </div>
    </div>
  );

  return <OkonomiWorkspaceMock go={go} />;
}

Object.assign(window, { OkonomiWorkspace });
