/* ───────────────────────────────────────────────────────────
   data.jsx — Decluttering Semplice method content + engine
   All copy authentic to Anna Matteucci / Scuola di Stile.
   Exports to window: QUESTIONS, QUIZ, PROFILES, CATEGORIES, SWATCHES,
   ANSWERS, scoreItem, verdict, fmtTime, GIcon, CatIcon, UI icons,
   seedSessions, buildAnalytics, planSessions, uid, gradientForScore
   ─────────────────────────────────────────────────────────── */

/* ---- the six decluttering questions (always same order, weight 1) ---- */
const QUESTIONS = [
  { id:'q1', q:'Lo indossi spesso?',
    hint:'Il trucchetto del segnaposto: gira la gruccia. Se a fine stagione è ancora girata, non lo indossi.' },
  { id:'q2', q:'Si abbina con il resto\ndel tuo guardaroba?',
    hint:'Un capo che dialoga con almeno tre altri capi lavora per te ogni giorno.' },
  { id:'q3', q:'Lo trovi comodo?',
    hint:'Se per indossarlo devi “sopportarlo”, raramente lo sceglierai davvero.' },
  { id:'q4', q:'Se va aggiustato,\nlo farai entro una settimana?',
    hint:'Vale solo se è integro o riparabile a breve. Il “prima o poi” non conta.' },
  { id:'q5', q:'Ti piace come ti senti\nquando lo indossi?',
    hint:'Ascolta la prima sensazione, non il sé ideale che vorresti diventare.' },
  { id:'q6', q:'Ti valorizza?',
    hint:'Realtà, non finzione: ti fa sembrare più te stessa, non una versione immaginata.' },
];

/* ---- answer model: swipe directions ---- */
const ANSWERS = {
  pos:{ key:'pos', dir:'right', label:'Sì',          short:'Sì',        v:+1,   color:'var(--pos)',  glyph:'→' },
  neg:{ key:'neg', dir:'left',  label:'No',          short:'No',        v:-1,   color:'var(--neg)',  glyph:'←' },
  neu:{ key:'neu', dir:'up',    label:'Neutro',      short:'Neutro',    v:0,    color:'var(--calm)', glyph:'↑' },
  ind:{ key:'ind', dir:'down',  label:'Indecisa',    short:'Forse',     v:-0.5, color:'#8a7bb0',     glyph:'↓' },
};
const DIR_TO_ANSWER = { right:'pos', left:'neg', up:'neu', down:'ind' };

/* ---- the profiling quiz ---- */
const QUIZ = [
  { id:'g1', kind:'profile', q:'Come definiresti il tuo guardaroba ora?',
    opts:[ {v:'A',label:'Tutto sommato ordinato'},
           {v:'B',label:'Disorganizzato, ma niente di drammatico'},
           {v:'C',label:'Caos totale'} ] },
  { id:'g2', kind:'profile', q:'Cosa pensi dei tuoi vestiti?',
    opts:[ {v:'A',label:'La maggior parte mi piacciono e li vorrei tenere'},
           {v:'B',label:'Alcuni mi piacciono ancora, altri no e vorrei liberarmene'},
           {v:'C',label:'Andrebbero quasi tutti dati via'} ] },
  { id:'g3', kind:'profile', q:'Come ti senti quando apri l’armadio?',
    opts:[ {v:'A',label:'Bene — vedo le opzioni che ho e sono soddisfatta'},
           {v:'B',label:'Così così — cose che amo mescolate a cose che non sento più “mie”'},
           {v:'C',label:'Insomma… — vedo caos invece di me stessa'} ] },
  { id:'g4', kind:'size', q:'Com’è organizzato il tuo guardaroba?',
    opts:[ {v:'A',label:'Più armadi e cassettiere'},
           {v:'B',label:'Più ante dell’armadio'},
           {v:'C',label:'Più contenuto'} ] },
  { id:'g5', kind:'cadence', q:'Quanto tempo vuoi dedicare al decluttering?',
    opts:[ {v:'A',label:'Una sola seduta, magari di più ore'},
           {v:'B',label:'Qualche seduta da un’ora, a qualche giorno di distanza'},
           {v:'C',label:'Più sedute da mezz’ora, a una settimana di distanza'} ] },
];

const PROFILES = {
  A:{ key:'decisa', name:'La Decisa', sym:'I',
      tag:'Curare, non rivoluzionare',
      body:'Nel tuo guardaroba ci sono cose che ti fanno stare bene. Per te il decluttering serve a curare meglio lo spazio e a liberarti dell’eccesso.',
      tint:'var(--sky-700)', soft:'#e8f1f4' },
  B:{ key:'equilibrista', name:'L’Equilibrista', sym:'II',
      tag:'Lasciare andare il passato',
      body:'Il tuo guardaroba è diviso a metà: vestiti che ti rappresentano mescolati a quelli delle tue versioni passate. Il decluttering ti aiuterà a liberarti del passato per concentrarti sul futuro.',
      tint:'var(--magenta)', soft:'#fbe7f1' },
  C:{ key:'crisalide', name:'La Crisalide', sym:'III',
      tag:'Spiegare le ali',
      body:'Nel tuo guardaroba c’è tanto potenziale: hai solo bisogno di tirarlo fuori. Il decluttering per te sarà un’esperienza trasformativa che ti porterà a spiegare le ali.',
      tint:'var(--navy)', soft:'#e7ecf4' },
};

/* ---- garment categories (Top/Bottom/Capispalla + extended) ---- */
const CATEGORIES = [
  { id:'top',     label:'Top',        sub:'Camicie, magliette, maglioni' },
  { id:'bottom',  label:'Bottom',     sub:'Gonne e pantaloni' },
  { id:'capi',    label:'Capispalla', sub:'Giacche e cappotti' },
  { id:'abiti',   label:'Abiti',      sub:'Vestiti interi' },
  { id:'scarpe',  label:'Scarpe',     sub:'Calzature' },
  { id:'access',  label:'Accessori',  sub:'Borse, cinture, sciarpe' },
];
const catById = id => CATEGORIES.find(c=>c.id===id) || CATEGORIES[0];

/* fabric swatch palette — muted, editorial */
const SWATCHES = ['#3d4f6b','#9c6b5a','#6f7d5a','#b58a4a','#7a5c7d','#46615f','#a8556a','#56657a','#8d8472','#c2974f'];

/* ---- scoring ---- */
function scoreItem(answers, weights){
  let s=0;
  for(const Q of QUESTIONS){
    const a = answers && answers[Q.id];
    if(!a) continue;
    const w = (weights && weights[Q.id]) ?? 1;
    s += (ANSWERS[a]?.v ?? 0) * w;
  }
  return Math.round(s*100)/100;
}
function totalWeight(weights){
  return QUESTIONS.reduce((t,Q)=>t+((weights&&weights[Q.id])??1),0);
}
function verdict(score, threshold){ return score >= (threshold ?? 0.5) ? 'keep' : 'give'; }

/* normalize score to -1..1 for the gradient */
function scoreNorm(score, weights){
  const max = totalWeight(weights);
  return Math.max(-1, Math.min(1, max? score/max : 0));
}

/* card background gradient: starts blue (neutral), trends green / red */
function gradientForScore(score, weights){
  const t = scoreNorm(score, weights);           // -1..1
  const calm=[75,134,160], pos=[31,138,91], neg=[196,60,43];
  const lerp=(a,b,k)=>a.map((x,i)=>Math.round(x+(b[i]-x)*k));
  const top = t>=0 ? lerp(calm,pos,t) : lerp(calm,neg,-t);
  const k = Math.abs(t);
  const bottom = lerp(top.map(x=>Math.max(0,x-26)), top, 1-k*0.4);
  const rgb=a=>`rgb(${a[0]},${a[1]},${a[2]})`;
  // darker, richer base when decided; bluer & flatter when neutral
  return `linear-gradient(165deg, ${rgb(top)} 0%, ${rgb(bottom)} 62%, ${rgb(bottom.map(x=>Math.max(0,x-30)))} 100%)`;
}

/* ---- misc helpers ---- */
let _id=1000; const uid=()=>'id'+(++_id);
function fmtTime(sec){
  sec=Math.max(0,Math.round(sec));
  const m=Math.floor(sec/60), s=sec%60;
  return m+':'+String(s).padStart(2,'0');
}
function relDay(d){
  const today=new Date(); today.setHours(0,0,0,0);
  const t=new Date(d); t.setHours(0,0,0,0);
  const diff=Math.round((t-today)/86400000);
  if(diff===0) return 'Oggi';
  if(diff===1) return 'Domani';
  if(diff===-1) return 'Ieri';
  if(diff>1&&diff<7) return ['Dom','Lun','Mar','Mer','Gio','Ven','Sab'][t.getDay()];
  const mesi=['gen','feb','mar','apr','mag','giu','lug','ago','set','ott','nov','dic'];
  return t.getDate()+' '+mesi[t.getMonth()];
}

Object.assign(window, {
  QUESTIONS, ANSWERS, DIR_TO_ANSWER, QUIZ, PROFILES, CATEGORIES, catById, SWATCHES,
  scoreItem, totalWeight, verdict, scoreNorm, gradientForScore, uid, fmtTime, relDay,
});
