#pragma once
#include "types.hpp"
#include <string>

// Load/save the actor gallery. HDF5 (.h5/.hdf5) is the only format written;
// legacy gallery.json files are still readable for backward compatibility but
// save_gallery always writes HDF5 regardless of the requested extension.
//
// GR-005 is preserved here by absence: this is the only path that serialises a
// gallery, and it reads and writes the local filesystem only. There is no
// upload, no client, and no encoder that could put an embedding on a wire — the
// public server refuses to carry one (SR-004/UR-012), and the prohibition holds
// on this side by there being nothing that would try.
//
/// TRACES: GR-005 | SR-005
//
// HDF5 layout:
//   /embeddings   float32 [N, 512]   all actors' refs concatenated, row-major
//   /offset       int64   [A]        first row of actor a in /embeddings
//   /count        int32   [A]        number of refs for actor a
//   /imdb_id /tmdb_id /jellyfin_id /name : variable-length string [A]
//   /source_images : variable-length string [N], parallel to /embeddings rows
//   /embedder/model_name   : scalar var-len string attr — embedder file basename
//   /embedder/model_sha256 : scalar var-len string attr — SHA-256 of that file
//   /embedder/embed_dim    : scalar int32 attr
//                        The GR-004 model binding. Absent group == unstamped
//                        (pre-GR-004 file); see gallery/embedder_stamp.hpp.
//   /calibration/a, /b : scalar float32 attrs — Platt-sigmoid P(match|sim) fit
//   /calibration/valid : scalar int8 attr (0/1)
//   /calibration/hash  : scalar uint64 attr — hash of the embeddings the fit
//                        was computed from; a mismatch means "recompute"
//
// Legacy JSON format (read-only):
// {
//   "embedder": {"model_name": "...", "model_sha256": "...", "embed_dim": 512},
//   "actors": [
//     {
//       "imdb_id":      "nm0000093",         // optional, "" if unknown
//       "tmdb_id":      "287",                // optional, "" if unknown
//       "jellyfin_id":  "abc123-guid",        // optional, "" unless from make_jellyfin_gallery.py
//       "name":         "Brad Pitt",
//       "source_images": ["img1.jpg", "img2.jpg"],
//       "embeddings":   [[0.012, -0.034, ...], ...]   // one 512-float array per image
//     }
//   ]
// }

ActorGallery load_gallery(const std::string& path);
void         save_gallery(const std::string& path, const ActorGallery& gallery);
