package web // backup_page_state holds the small pure state-pick helpers that drive the honest // per-app / whole-page messaging on the /backups page. They are pure (no *Server, // no I/O) so the truth-table can be unit-tested directly without a fixture Server. // dbSectionState decides how the "Adatbázisok" section (and the "Adatbázis mentve" // stat card) should read, given how many databases were discovered live at render // time and how many dump files exist on disk: // - "dumps" — dump files exist → show the real dump table / count. // - "pending" — a database was discovered but no dump written yet → "first run tonight". // - "embedded" — neither: the deployed apps carry embedded DBs (e.g. SQLite) that ride // the file/volume backup; no separate dump is expected, so a bare "0" would lie. // // dumps wins over discovered: stale dumps from a since-removed DB app are still a real, // restorable artifact and must be shown normally (see the §8 edge-case table). func dbSectionState(discovered, dumps int) string { switch { case dumps > 0: return "dumps" case discovered > 0: return "pending" default: return "embedded" } } // tier3State decides the per-app "3. mentés" (off-box / off-site) row state: // - "unconfigured" — no off-box target set (configured wins over a stale per-app toggle). // - "off" — target set but this app is not toggled for off-box backup. // - "escrow_pending" — toggled, but the repo password is not yet escrowed (fork-4 gate): // runs are paused, so we must NOT imply a successful run. // - "active" — toggled and escrowed: the app is included in the off-box runs. // // Precedence is strict: configured → toggle → escrow. Anything other than "escrowed" // while toggled is treated as escrow-pending (never "active"), so a pre-pending LastStatus // of "ok" can never surface a false "Sikeres". func tier3State(configured, toggled bool, escrowState string) string { switch { case !configured: return "unconfigured" case !toggled: return "off" case escrowState != "escrowed": return "escrow_pending" default: return "active" } }