// nyby-api.jsx — Fasade mot NyBy-API
// PROTOTYPE: returnerer mock-data nå. Byttes ut med ekte API-kall senere
// uten at resten av VVJ-koden må endres — samme funksjonssignaturer.

// ══════════════════════════════════════════════════════════════
// KONFIGURASJON
// ══════════════════════════════════════════════════════════════
const NYBY_CONFIG = {
  // Settes når ekte API er klart:
  baseUrl: null,              // f.eks. 'https://api.nyby.no/v1'
  apiKey:  null,              // hentes fra sikker kilde (Edge Function)
  bruktModus: 'prototype',    // 'prototype' | 'live'
};

// Mock-datasett som speiler NyBy sitt dashboard
const NYBY_MOCK_OPPDRAG = [
  { nyby_id:'ny-203', tittel:'Hjelpe til på sommerfest',            oppdragsgiver:'Bydel Nordstrand · Frivilligsentralen', sted:'Holmlia',        dato:'2026-05-17', timer:3,   sats:240, type:'Aktivitet', status:'fullført',     tags:['kveld','sosial'] },
  { nyby_id:'ny-201', tittel:'Matservering · seniortreff',          oppdragsgiver:'Holmlia eldresenter',                   sted:'Holmlia',        dato:'2026-05-18', timer:5,   sats:235, type:'Servering',  status:'fullført',     tags:['dag','mat'] },
  { nyby_id:'ny-220', tittel:'Hjelp til 17. mai-arrangement',       oppdragsgiver:'Bydel Bjerke',                          sted:'Bjerke',         dato:'2026-05-24', timer:6,   sats:250, type:'Aktivitet', status:'påtatt',       tags:['helg','sosial'] },
  { nyby_id:'ny-222', tittel:'Kveldsvakt — kafé Aktivitetshuset',   oppdragsgiver:'Bydel Søndre Nordstrand',               sted:'Holmlia',        dato:'2026-05-26', timer:4,   sats:235, type:'Servering',  status:'påtatt',       tags:['kveld','mat'] },
  { nyby_id:'ny-230', tittel:'PC-oppsett · 12 stk for seniorsenter',oppdragsgiver:'Bydel St. Hanshaugen',                  sted:'St. Hanshaugen', dato:'2026-05-27', timer:5,   sats:270, type:'IT',        status:'tilgjengelig', tags:['dag','fag'] },
  { nyby_id:'ny-231', tittel:'Sykkelmekaniker · pop-up bydelsdag',  oppdragsgiver:'Bydel Gamle Oslo',                      sted:'Gamle Oslo',     dato:'2026-05-30', timer:6,   sats:265, type:'Mekanikk',  status:'tilgjengelig', tags:['helg','fag'] },
  { nyby_id:'ny-232', tittel:'Servering · sommerfest barnehage',    oppdragsgiver:'Vahl skole FAU',                        sted:'Grønland',       dato:'2026-06-04', timer:4,   sats:230, type:'Servering',  status:'tilgjengelig', tags:['kveld','mat'] },
  { nyby_id:'ny-233', tittel:'Sykkelopplæring barn (4 økter)',      oppdragsgiver:'Bydel Frogner',                         sted:'Frogner',        dato:'2026-06-08', timer:8,   sats:280, type:'Mekanikk',  status:'tilgjengelig', tags:['dag','fag'] },
  { nyby_id:'ny-234', tittel:'Catering · jubileum 80 personer',     oppdragsgiver:'Privat (verifisert)',                   sted:'Holmlia',        dato:'2026-06-13', timer:7,   sats:250, type:'Servering',  status:'tilgjengelig', tags:['kveld','mat'] },
];

const NYBY_MOCK_OPPDRAGSGIVERE = [
  { navn:'Bydel Søndre Nordstrand', oppdrag_totalt:42, aktive:8,  type:'offentlig' },
  { navn:'Bydel Gamle Oslo',        oppdrag_totalt:31, aktive:5,  type:'offentlig' },
  { navn:'Holmlia eldresenter',     oppdrag_totalt:18, aktive:3,  type:'offentlig' },
  { navn:'Frivilligsentralen',      oppdrag_totalt:27, aktive:6,  type:'frivillig' },
];

// Simuler nettverkslatens
const nybyDelay = (ms = 350) => new Promise(r => setTimeout(r, ms));

// ══════════════════════════════════════════════════════════════
// API-FUNKSJONER — samme signatur uansett modus
// ══════════════════════════════════════════════════════════════

// Hent alle oppdrag fra NyBy
async function nybyHentOppdrag(filter = {}) {
  if (NYBY_CONFIG.bruktModus === 'live' && NYBY_CONFIG.baseUrl) {
    // FREMTIDIG: ekte API-kall
    // const res = await fetch(`${NYBY_CONFIG.baseUrl}/oppdrag`, {
    //   headers: { 'Authorization': `Bearer ${NYBY_CONFIG.apiKey}` }
    // });
    // return await res.json();
    throw new Error('NyBy live-API ikke konfigurert ennå');
  }
  // PROTOTYPE
  await nybyDelay();
  let data = NYBY_MOCK_OPPDRAG.slice();
  if (filter.status) data = data.filter(o => o.status === filter.status);
  if (filter.type)   data = data.filter(o => o.type === filter.type);
  return data;
}

// Hent statistikk for dashboard
async function nybyHentDashboard() {
  if (NYBY_CONFIG.bruktModus === 'live' && NYBY_CONFIG.baseUrl) {
    throw new Error('NyBy live-API ikke konfigurert ennå');
  }
  await nybyDelay(250);
  const o = NYBY_MOCK_OPPDRAG;
  return {
    tilgjengelige: o.filter(x => x.status === 'tilgjengelig').length,
    paatatte:      o.filter(x => x.status === 'påtatt').length,
    fullforte:     o.filter(x => x.status === 'fullført').length,
    total_timer:   o.filter(x => x.status === 'fullført').reduce((s,x) => s + x.timer, 0),
    total_verdi:   o.filter(x => x.status === 'fullført').reduce((s,x) => s + x.timer * x.sats, 0),
    oppdragsgivere: NYBY_MOCK_OPPDRAGSGIVERE,
    sist_synk:     new Date().toISOString(),
    api_status:    NYBY_CONFIG.bruktModus === 'live' ? 'tilkoblet' : 'prototype',
  };
}

// Importer oppdrag til lokal Supabase-tabell
async function nybyImporterTilSupabase() {
  const oppdrag = await nybyHentOppdrag();
  let importert = 0;
  for (const o of oppdrag) {
    const { error } = await window._sb.from('vvj_oppdrag').upsert({
      nyby_id: o.nyby_id, tittel: o.tittel, oppdragsgiver: o.oppdragsgiver,
      sted: o.sted, dato: o.dato, timer: o.timer, sats: o.sats,
      type: o.type, status: o.status, tags: o.tags,
    }, { onConflict: 'nyby_id' });
    if (!error) importert++;
  }
  return { importert, totalt: oppdrag.length };
}

// Påta seg et oppdrag (deltaker tar oppdrag)
async function nybyPaataOppdrag(oppdragId, deltakerId) {
  if (NYBY_CONFIG.bruktModus === 'live' && NYBY_CONFIG.baseUrl) {
    throw new Error('NyBy live-API ikke konfigurert ennå');
  }
  await nybyDelay(200);
  await window._sb.from('vvj_oppdrag')
    .update({ status: 'påtatt', deltaker_id: deltakerId })
    .eq('id', oppdragId);
  return { ok: true };
}

Object.assign(window, {
  NYBY_CONFIG,
  nybyHentOppdrag,
  nybyHentDashboard,
  nybyImporterTilSupabase,
  nybyPaataOppdrag,
});
