// tilgang-data.jsx — Data for Tilganger & innstillinger
// Bygger på tilgangsmodellen fra wireframet: rolle × modul, koder A/R/L/S/–,
// per-bruker overstyring, forespørsler, audit-logg og systeminnstillinger.

// ── Rettighetskoder ─────────────────────────────────────────────────────────
// '·' ingen · 'L' lese · 'R' redigere · 'A' admin · 'S' kun egne saker
const AKS_KODER = {
  '·': { label: 'Ingen',           kort: '–', bg: 'transparent',  fg: 'rgba(17,24,61,.28)', ring: 'rgba(17,24,61,.12)' },
  'L': { label: 'Lese',            kort: 'L', bg: '#e9eef7',       fg: '#3c4a6b',            ring: '#c5d2e8' },
  'R': { label: 'Redigere',        kort: 'R', bg: '#dbeed8',       fg: '#2f5a28',            ring: '#aed6a6' },
  'A': { label: 'Admin',           kort: 'A', bg: '#fcddde',       fg: '#a01a25',            ring: '#f3b6b9' },
  'S': { label: 'Kun egne saker',  kort: 'S', bg: '#e6e1f3',       fg: '#4a3a7a',            ring: '#cabfe8' },
};
const AKS_KODE_REKKE = ['·', 'L', 'R', 'A', 'S'];

// ── Moduler (rader i matrisen) ───────────────────────────────────────────────
const AKS_MODULER = [
  { k: 'forside',       n: 'Forside / intranett',        gruppe: 'Arbeid' },
  { k: 'prosjekt',      n: 'Prosjektoppfølging',         gruppe: 'Arbeid' },
  { k: 'vvj',           n: 'Verdens Viktigste Jobb',     gruppe: 'Arbeid' },
  { k: 'protokoll',     n: 'Møter & protokoller',        gruppe: 'Arbeid' },
  { k: 'transkripsjon', n: 'Rå transkripsjon',           gruppe: 'Arbeid', sub: true, sensitiv: true },
  { k: 'deltakere',     n: 'Deltakerdata',               gruppe: 'Arbeid', sensitiv: true },
  { k: 'okonomi',       n: 'Økonomi · regnskap',         gruppe: 'Drift' },
  { k: 'lonn',          n: 'Lønn (Visma)',               gruppe: 'Drift', sub: true, sensitiv: true },
  { k: 'hr',            n: 'HR · personalmappe',         gruppe: 'Drift', sensitiv: true },
  { k: 'kvalitet',      n: 'Kvalitet / avvik (ISO)',     gruppe: 'Drift' },
  { k: 'handbok',       n: 'Hånd­bøker',                  gruppe: 'Drift' },
  { k: 'styre',         n: 'Styreportal',                gruppe: 'Org', sensitiv: true },
  { k: 'tilganger',     n: 'Tilganger & innstillinger',  gruppe: 'Org', sensitiv: true },
];

// ── Roller (kolonner) — utvider OK_ROLLER med beskrivelse ────────────────────
const AKS_ROLLER = [
  { k: 'daglig-leder',  label: 'Daglig leder',   farge: '#f2545c', desc: 'Full innsikt på tvers av konsernet.' },
  { k: 'avd-leder',     label: 'Avd.leder',      farge: '#586ba4', desc: 'Admin på egen avdeling, lese på øvrige.' },
  { k: 'prosjektleder', label: 'Prosjektleder',  farge: '#28589f', desc: 'Eier egne prosjekter og protokoller.' },
  { k: 'hr',            label: 'HR',             farge: '#08605f', desc: 'Personalmapper, kompetanse, ansettelser.' },
  { k: 'okonomi',       label: 'Økonomi',        farge: '#11183d', desc: 'Regnskap, budsjett, lønn.' },
  { k: 'kvalitet',      label: 'Kvalitet',       farge: '#caa24a', desc: 'Avvik, revisjon, ISO-samsvar.' },
  { k: 'veileder',      label: 'Veileder',       farge: '#7d8aa8', desc: 'Egne deltakere og prosjekter.' },
  { k: 'styre',         label: 'Styremedlem',    farge: '#11183d', desc: 'Kun styreportal — kuratert innsikt.' },
  { k: 'ekstern',       label: 'Ekstern (NAV)',  farge: '#9aa3b8', desc: 'Begrenset innsyn i egne saker.' },
];

// ── Standardmatrise: rolle → rettighet pr. modul (rekkefølge = AKS_MODULER) ──
const AKS_MATRISE_DEFAULT = {
  //                forside prosjekt vvj  prot  transk delt  okon  lonn  hr    kval  hbok  styre tilg
  'daglig-leder':  ['A',   'A',     'A', 'A',  'L',   'L',  'A',  'L',  'A',  'A',  'A',  'A',  'A'],
  'avd-leder':     ['R',   'A',     'R', 'A',  'L',   'L',  'L',  '·',  'L',  'R',  'R',  '·',  '·'],
  'prosjektleder': ['L',   'A',     'R', 'A',  'L',   'S',  'S',  '·',  '·',  'R',  'R',  '·',  '·'],
  'hr':            ['R',   'L',     'L', 'L',  '·',   'L',  'L',  'R',  'A',  'L',  'R',  '·',  'L'],
  'okonomi':       ['L',   'L',     '·', 'L',  '·',   '·',  'A',  'A',  '·',  '·',  'L',  'L',  '·'],
  'kvalitet':      ['L',   'L',     'L', 'L',  'L',   'L',  '·',  '·',  '·',  'A',  'R',  '·',  '·'],
  'veileder':      ['L',   'S',     'R', 'S',  'S',   'S',  '·',  '·',  '·',  'R',  'L',  '·',  '·'],
  'styre':         ['·',   'L',     '·', 'L',  '·',   '·',  'L',  '·',  '·',  'L',  '·',  'A',  '·'],
  'ekstern':       ['·',   'S',     '·', 'S',  '·',   'S',  '·',  '·',  '·',  '·',  '·',  '·',  '·'],
};

// ── Brukere ──────────────────────────────────────────────────────────────────
// status: aktiv | sperret | invitert
const AKS_BRUKERE = [
  { id: 'KS', rolle: 'daglig-leder',  avd: 'Konsern',      epost: 'kari.solberg@oslokollega.no',   status: 'aktiv',    sist: 'I dag · 08:14',     mfa: true,  overstyr: 1 },
  { id: 'MR', rolle: 'prosjektleder', avd: 'Lambertseter', epost: 'marius.roed@oslokollega.no',     status: 'aktiv',    sist: 'I dag · 07:52',     mfa: true,  overstyr: 2 },
  { id: 'HM', rolle: 'hr',            avd: 'Stab',         epost: 'hanne.myhre@oslokollega.no',     status: 'aktiv',    sist: 'I dag · 09:03',     mfa: true,  overstyr: 0 },
  { id: 'ØS', rolle: 'okonomi',       avd: 'Stab',         epost: 'oystein.sand@oslokollega.no',    status: 'aktiv',    sist: 'I går · 16:40',     mfa: true,  overstyr: 0 },
  { id: 'KK', rolle: 'kvalitet',      avd: 'Stab',         epost: 'kristin.krogh@oslokollega.no',   status: 'aktiv',    sist: 'I dag · 08:30',     mfa: false, overstyr: 1 },
  { id: 'TM', rolle: 'avd-leder',     avd: 'Holmlia',      epost: 'tone.moen@oslokollega.no',       status: 'aktiv',    sist: 'I dag · 08:55',     mfa: true,  overstyr: 0 },
  { id: 'HE', rolle: 'avd-leder',     avd: 'Vulkan',       epost: 'hakon.eide@oslokollega.no',      status: 'aktiv',    sist: '23. mai · 14:20',   mfa: true,  overstyr: 0 },
  { id: 'JN', rolle: 'veileder',      avd: 'Lambertseter', epost: 'jonas.nilsen@oslokollega.no',    status: 'aktiv',    sist: 'I dag · 07:30',     mfa: false, overstyr: 0 },
  { id: 'AN', rolle: 'veileder',      avd: 'Skullerud',    epost: 'astrid.nyhus@oslokollega.no',    status: 'aktiv',    sist: 'I går · 15:12',     mfa: true,  overstyr: 1 },
  { id: 'RB', rolle: 'avd-leder',     avd: 'Vulkan',       epost: 'ruben.bo@oslokollega.no',        status: 'aktiv',    sist: '22. mai · 11:05',   mfa: false, overstyr: 0 },
  { id: 'IH', rolle: 'avd-leder',     avd: 'Lambertseter', epost: 'ida.holm@oslokollega.no',        status: 'aktiv',    sist: 'I dag · 06:48',     mfa: true,  overstyr: 0 },
  { id: 'PG', rolle: 'styre',         avd: 'Styret',       epost: 'per.gundersen@styret.no',        status: 'aktiv',    sist: '19. mai · 19:30',   mfa: true,  overstyr: 0,  navn: 'Per Gundersen', farge: '#11183d' },
  { id: 'LV', rolle: 'styre',         avd: 'Styret',       epost: 'liv.vik@styret.no',              status: 'aktiv',    sist: '12. mai · 20:10',   mfa: true,  overstyr: 0,  navn: 'Liv Vik', farge: '#586ba4' },
  { id: 'BN', rolle: 'ekstern',       avd: 'NAV Oslo',     epost: 'bjorn.naas@nav.no',              status: 'aktiv',    sist: '20. mai · 13:25',   mfa: true,  overstyr: 0,  navn: 'Bjørn Nås', farge: '#9aa3b8' },
  { id: 'GS', rolle: 'veileder',      avd: 'Holmlia',      epost: 'gro.strand@oslokollega.no',      status: 'sperret',  sist: '4. apr · 10:02',    mfa: false, overstyr: 0,  navn: 'Gro Strand', farge: '#7d8aa8' },
  { id: 'EW', rolle: 'veileder',      avd: 'Skullerud',    epost: 'emil.wold@oslokollega.no',       status: 'invitert', sist: 'Ikke logget inn',   mfa: false, overstyr: 0,  navn: 'Emil Wold', farge: '#cedfdf' },
];

// ── Per-bruker overstyringer (utover rolle) ──────────────────────────────────
// retning: 'gi' | 'fjern'
const AKS_OVERSTYRINGER = [
  { bruker: 'KS', modul: 'lonn',    fra: 'L', til: 'A', retning: 'gi',    av: 'Systemoppsett', dato: '2026-01-04', begrunnelse: 'Daglig leder godkjenner lønnskjøringer ved fravær av økonomisjef.' },
  { bruker: 'MR', modul: 'okonomi', fra: 'S', til: 'R', retning: 'gi',    av: 'ØS', dato: '2026-03-12', begrunnelse: 'Budsjettansvar for AFT-porteføljen Lambertseter.' },
  { bruker: 'MR', modul: 'hr',      fra: '·', til: 'L', retning: 'gi',    av: 'HM', dato: '2026-02-20', begrunnelse: 'Innsyn i egne ansattes kompetanseprofiler.' },
  { bruker: 'KK', modul: 'lonn',    fra: '·', til: 'L', retning: 'gi',    av: 'ØS', dato: '2026-04-01', begrunnelse: 'Revisjonsspor lønn ifm. ISO 9001 §7.' },
  { bruker: 'AN', modul: 'deltakere', fra: 'S', til: 'R', retning: 'gi',  av: 'MR', dato: '2026-05-02', begrunnelse: 'Hovedveileder for delt kohort på Skullerud.' },
];

// ── Tilgangsforespørsler (til godkjenning) ──────────────────────────────────
const AKS_FORESPORSLER = [
  { id: 'fr1', bruker: 'JN', modul: 'okonomi',   onsket: 'L', begrunnelse: 'Trenger å se prosjektbudsjett for AFT-kohorten jeg jobber på.', dato: '2026-05-26', haster: false, godkjenner: 'MR' },
  { id: 'fr2', bruker: 'AN', modul: 'hr',        onsket: 'L', begrunnelse: 'Følger opp sykefravær i eget veilederteam.', dato: '2026-05-25', haster: false, godkjenner: 'HM' },
  { id: 'fr3', bruker: 'RB', modul: 'lonn',      onsket: 'R', begrunnelse: 'Skal registrere timer for OK:sykkel-deltakere selv.', dato: '2026-05-24', haster: true, godkjenner: 'ØS' },
  { id: 'fr4', bruker: 'BN', modul: 'prosjekt',  onsket: 'L', begrunnelse: 'NAV ber om utvidet innsyn i IPS Holmlia-leveransen.', dato: '2026-05-22', haster: false, godkjenner: 'KS' },
];

// ── Aktivitets- / audit-logg ─────────────────────────────────────────────────
// type: tilgang | innlogging | rolle | sperre | innstilling | eksport | avslag
const AKS_LOGG = [
  { tid: 'I dag · 09:12',   aktor: 'KS', type: 'tilgang',     tekst: 'ga Marius Røed admin på Lønn (Visma)', mal: 'MR' },
  { tid: 'I dag · 08:30',   aktor: 'KK', type: 'innlogging',  tekst: 'logget inn fra ny enhet (MacBook · Oslo)', mal: null },
  { tid: 'I går · 17:45',   aktor: 'HM', type: 'avslag',      tekst: 'avslo forespørsel: Astrid Nyhus → HR (lese)', mal: 'AN' },
  { tid: 'I går · 16:02',   aktor: 'ØS', type: 'eksport',     tekst: 'eksporterte konsern-resultatrapport (PDF)', mal: null },
  { tid: 'I går · 11:20',   aktor: 'KS', type: 'sperre',      tekst: 'sperret kontoen til Gro Strand (sluttet)', mal: 'GS' },
  { tid: '24. mai · 14:33', aktor: 'KS', type: 'rolle',       tekst: 'inviterte Emil Wold som Veileder · Skullerud', mal: 'EW' },
  { tid: '24. mai · 09:08', aktor: 'ØS', type: 'tilgang',     tekst: 'ga Kristin Krogh lese på Lønn (Visma)', mal: 'KK' },
  { tid: '23. mai · 13:51', aktor: 'KS', type: 'innstilling', tekst: 'slo på påkrevd 2-faktor for alle ledere', mal: null },
  { tid: '22. mai · 10:14', aktor: 'MR', type: 'tilgang',     tekst: 'ga Astrid Nyhus redigere på Deltakerdata', mal: 'AN' },
  { tid: '20. mai · 08:40', aktor: 'BN', type: 'innlogging',  tekst: 'logget inn (ekstern · NAV Oslo)', mal: null },
];

const AKS_LOGG_TONE = {
  tilgang:     { dot: '#2f5a28', bg: '#dbeed8', label: 'Tilgang gitt' },
  avslag:      { dot: '#a01a25', bg: '#fcddde', label: 'Avslått' },
  innlogging:  { dot: '#3c4a6b', bg: '#e9eef7', label: 'Innlogging' },
  sperre:      { dot: '#a01a25', bg: '#fcddde', label: 'Sperret' },
  rolle:       { dot: '#4a3a7a', bg: '#e6e1f3', label: 'Rolle' },
  innstilling: { dot: '#11183d', bg: '#e5f3fc', label: 'Innstilling' },
  eksport:     { dot: '#8e5a05', bg: '#fdeac8', label: 'Eksport' },
};

// ── Systeminnstillinger ──────────────────────────────────────────────────────
const AKS_INNSTILLINGER = [
  {
    gruppe: 'Sikkerhet', ikon: 'shield', valg: [
      { k: 'mfa',      navn: 'Påkrevd 2-faktor for ledere', desc: 'Daglig leder, avd.ledere og stab må bruke 2-faktor.', type: 'toggle', verdi: true },
      { k: 'mfaall',   navn: 'Påkrevd 2-faktor for alle',   desc: 'Gjelder også veiledere og eksterne.', type: 'toggle', verdi: false },
      { k: 'sso',      navn: 'Single sign-on (Microsoft 365)', desc: 'Innlogging via Entra ID. Anbefalt.', type: 'toggle', verdi: true },
      { k: 'timeout',  navn: 'Automatisk utlogging', desc: 'Logg ut inaktive økter.', type: 'select', verdi: '30 min', opts: ['15 min', '30 min', '1 time', '8 timer'] },
    ],
  },
  {
    gruppe: 'Personvern & data', ikon: 'doc', valg: [
      { k: 'logg',     navn: 'Audit-logg', desc: 'Logg alle tilgangsendringer og innlogginger.', type: 'toggle', verdi: true },
      { k: 'oppbevar', navn: 'Oppbevaringstid logg', desc: 'Hvor lenge loggen lagres.', type: 'select', verdi: '24 måneder', opts: ['6 måneder', '12 måneder', '24 måneder', '5 år'] },
      { k: 'deltaker', navn: 'Maskering av deltakerdata', desc: 'Skjul fødselsnummer for roller uten admin.', type: 'toggle', verdi: true },
      { k: 'eksport',  navn: 'Tillat dataeksport', desc: 'Hvem kan eksportere rapporter med persondata.', type: 'select', verdi: 'Kun ledere', opts: ['Alle', 'Kun ledere', 'Kun daglig leder'] },
    ],
  },
  {
    gruppe: 'Varsler', ikon: 'bell', valg: [
      { k: 'foresp',   navn: 'Varsle ved tilgangsforespørsel', desc: 'Send e-post til godkjenner.', type: 'toggle', verdi: true },
      { k: 'nyinn',    navn: 'Varsle ved innlogging fra ny enhet', desc: 'Send varsel til brukeren.', type: 'toggle', verdi: true },
      { k: 'ukerapp',  navn: 'Ukentlig sikkerhetssammendrag', desc: 'Til daglig leder hver mandag.', type: 'toggle', verdi: false },
    ],
  },
  {
    gruppe: 'Integrasjoner', ikon: 'cog', valg: [
      { k: 'visma',    navn: 'Visma Lønn', desc: 'Synk av lønns- og ansattdata.', type: 'status', verdi: 'Koblet' },
      { k: 'finago',   navn: 'Finago regnskap', desc: 'Automatisk import av regnskapstall.', type: 'status', verdi: 'Koblet' },
      { k: 'm365',     navn: 'Microsoft 365', desc: 'E-post, kalender og SSO.', type: 'status', verdi: 'Koblet' },
      { k: 'nav',      navn: 'NAV Arena (ekstern)', desc: 'Innsyn for NAV-veiledere.', type: 'status', verdi: 'Venter' },
    ],
  },
];

// Hjelper: navn på bruker (TEAM først, så lokale navn)
function aksNavn(id) {
  if (typeof TEAM !== 'undefined' && TEAM[id]) return TEAM[id].n;
  const b = AKS_BRUKERE.find(x => x.id === id);
  return b?.navn || id;
}
function aksFarge(id) {
  if (typeof TEAM !== 'undefined' && TEAM[id]) return TEAM[id].c;
  const b = AKS_BRUKERE.find(x => x.id === id);
  return b?.farge || '#9aa3b8';
}
function aksRolle(k) { return AKS_ROLLER.find(r => r.k === k); }

Object.assign(window, {
  AKS_KODER, AKS_KODE_REKKE, AKS_MODULER, AKS_ROLLER, AKS_MATRISE_DEFAULT,
  AKS_BRUKERE, AKS_OVERSTYRINGER, AKS_FORESPORSLER, AKS_LOGG, AKS_LOGG_TONE,
  AKS_INNSTILLINGER, aksNavn, aksFarge, aksRolle,
});
