/* ============================================================
   CENSA — données runtime (site vierge, prêt à l'emploi)
   Aucune donnée d'exemple : tout est créé par l'utilisateur
   et persisté dans le navigateur (localStorage).
   text fields = { fr, en }
   ============================================================ */

/* Compte système officiel (identité de marque). N'injecte aucun contenu. */
const CENSA_ACCOUNT = {
  id: 'censa', name: 'CENSA', handle: 'censa', system: true, verified: true,
  hue: 196, score: null, observers: '—',
  bio: { fr: "Compte officiel. Réseau social CENSA.", en: "Official account. CENSA social network." },
};

/* Gabarit d'un nouveau compte vierge. */
const ME = {
  id: 'me', name: '', handle: '', verified: false, hue: 196,
  score: 100, observers: 0, joined: String(new Date().getFullYear()),
  bio: { fr: '', en: '' },
};

/* Membres connus = uniquement le compte système au départ.
   (De vrais profils n'existeront qu'avec un back-end partagé.) */
const USERS = [CENSA_ACCOUNT];

/* L'utilisateur connecté, injecté au runtime par l'app. */
let CURRENT_ME = ME;
function setCensaMe(u) { CURRENT_ME = u || ME; }

function uget(id) {
  if (id === 'me' || (CURRENT_ME && id === CURRENT_ME.id)) return CURRENT_ME;
  const f = USERS.find(u => u.id === id);
  return f || CURRENT_ME || ME;
}

/* Tout est vide : un site neuf. */
const POSTS = [];
const COMMENTS = {};
const TRENDS = [];
const NOTIFS = [];
const THREADS = [];

/* ------------------------------------------------------------
   Membres recensés — annuaire CENSA utilisé par la section
   « Ami(e)s » (suggestions, invitations). Profils fictifs ;
   les avatars sont générés à partir de la teinte (hue).
   ------------------------------------------------------------ */
const MEMBERS = [
  { id: 'm_noor', name: 'Noor Haddad', handle: 'noor.h', hue: 150, verified: true, score: 11200, observers: 4300, mutual: 18,
    bio: { fr: 'Conforme depuis le premier jour.', en: 'Compliant since day one.' } },
  { id: 'm_dmitri', name: 'Dmitri Volkov', handle: 'dmitri.v', hue: 260, verified: true, score: 9650, observers: 2980, mutual: 9,
    bio: { fr: 'Je note tout. Surtout vous.', en: 'I note everything. Especially you.' } },
  { id: 'm_aicha', name: 'Aïcha Diop', handle: 'aicha.d', hue: 95, verified: false, score: 6740, observers: 1520, mutual: 7,
    bio: { fr: 'Visible, donc existante.', en: 'Visible, therefore real.' } },
  { id: 'm_yara', name: 'Yara Mansour', handle: 'yara.m', hue: 175, verified: true, score: 7820, observers: 1980, mutual: 11,
    bio: { fr: 'Rien à cacher, tout à montrer.', en: 'Nothing to hide, all to show.' } },
  { id: 'm_elise', name: 'Élise Tanaka', handle: 'elise.t', hue: 330, verified: true, score: 8420, observers: 2140, mutual: 12,
    bio: { fr: 'Le regard des autres me tient debout.', en: 'The gaze of others holds me up.' } },
  { id: 'm_karim', name: 'Karim Belhadj', handle: 'karim.b', hue: 196, verified: false, score: 5310, observers: 980, mutual: 5,
    bio: { fr: 'Score en hausse. Sourire imposé.', en: 'Score rising. Smile mandatory.' } },
  { id: 'm_lea', name: 'Léa Fontaine', handle: 'lea.f', hue: 30, verified: false, score: 3120, observers: 540, mutual: 3,
    bio: { fr: 'Nouvelle recensée. J\u2019apprends les règles.', en: 'Newly catalogued. Learning the rules.' } },
  { id: 'm_hana', name: 'Hana Kim', handle: 'hana.k', hue: 320, verified: true, score: 13400, observers: 5100, mutual: 21,
    bio: { fr: 'Modèle de conformité officiel.', en: 'Official model of compliance.' } },
  { id: 'm_mateo', name: 'Mateo Rossi', handle: 'mateo.r', hue: 220, verified: false, score: 4480, observers: 770, mutual: 2,
    bio: { fr: 'On me regarde, donc je suis.', en: 'I am watched, therefore I am.' } },
  { id: 'm_tomas', name: 'Tomas Novak', handle: 'tomas.n', hue: 60, verified: false, score: 2890, observers: 410, mutual: 1,
    bio: { fr: 'Discret. C\u2019est suspect, paraît-il.', en: 'Discreet. Suspicious, apparently.' } },
];

/* Liens déjà validés au démarrage (démo). */
const DEFAULT_FRIEND_IDS = ['m_noor', 'm_dmitri', 'm_aicha', 'm_yara'];

/* ------------------------------------------------------------
   Offres d'emploi de démonstration (section « Emploi »).
   Les annonces publiées par l'utilisateur s'ajoutent par-dessus.
   ------------------------------------------------------------ */
const JOBS = [
  { id: 'j1', title: { fr: 'Analyste de conformité', en: 'Compliance analyst' }, company: 'CENSA',
    location: { fr: 'Télétravail surveillé', en: 'Monitored remote' }, type: { fr: 'CDI', en: 'Full-time' }, salary: '3 200 $/mois',
    desc: { fr: 'Évaluez les scores sociaux des membres et signalez les écarts de conformité. Rigueur et loyauté exigées.', en: 'Assess members\u2019 social scores and flag compliance gaps. Rigour and loyalty required.' },
    posted: { fr: 'il y a 2 j', en: '2d ago' } },
  { id: 'j2', title: { fr: 'Modérateur·rice de contenu', en: 'Content moderator' }, company: 'Bureau Central',
    location: { fr: 'Présentiel', en: 'On-site' }, type: { fr: 'CDD', en: 'Contract' }, salary: '2 600 $/mois',
    desc: { fr: 'Examinez les publications signalées pour pensée divergente. Décisions rapides, archivage permanent.', en: 'Review posts flagged for divergent thought. Fast decisions, permanent archiving.' },
    posted: { fr: 'il y a 4 j', en: '4d ago' } },
  { id: 'j3', title: { fr: 'Ingénieur·e en reconnaissance', en: 'Recognition engineer' }, company: 'OptiqueCorp',
    location: { fr: 'Hybride', en: 'Hybrid' }, type: { fr: 'CDI', en: 'Full-time' }, salary: '4 800 $/mois',
    desc: { fr: 'Améliorez les modèles de reconnaissance faciale du réseau. Caméras fournies. Vie privée non incluse.', en: 'Improve the network\u2019s facial-recognition models. Cameras provided. Privacy not included.' },
    posted: { fr: 'il y a 1 sem', en: '1w ago' } },
  { id: 'j4', title: { fr: 'Agent·e de catalogage citoyen', en: 'Citizen cataloguer' }, company: 'Préfecture des Données',
    location: { fr: 'Présentiel', en: 'On-site' }, type: { fr: 'CDI', en: 'Full-time' }, salary: '2 400 $/mois',
    desc: { fr: 'Recensez les nouveaux membres et tenez à jour leurs dossiers. Aucun détail n\u2019est trop petit.', en: 'Register new members and keep their files current. No detail is too small.' },
    posted: { fr: 'il y a 1 sem', en: '1w ago' } },
];

Object.assign(window, { CENSA_ACCOUNT, USERS, ME, uget, setCensaMe, POSTS, COMMENTS, TRENDS, NOTIFS, THREADS, MEMBERS, DEFAULT_FRIEND_IDS, JOBS });
