// data.jsx — LBC Platform sample data (French)

const euro = (n) => (n || n === 0) ? n.toLocaleString('fr-FR') + ' €' : '—';
const euro0 = (n) => n.toLocaleString('fr-FR');

const PARTNER = {
  company: 'Agence Riviera Immobilier',
  firstName: 'Camille',
  lastName: 'Mercier',
  initials: 'CM',
  email: 'camille.mercier@riviera-immo.fr',
  city: 'Nice',
  type: 'Agence immobilière',
  tier: 'Bronze',
  rate: 6,
  memberSince: 'mars 2026',
};

// status keys: recu | devis | accepte | effectue | verse | perdu
const STATUS = {
  recu:     { key:'recu',     label:'Reçu',               cls:'b-recu',     inProgress:true  },
  devis:    { key:'devis',    label:'Devis envoyé',       cls:'b-devis',    inProgress:true  },
  accepte:  { key:'accepte',  label:'Accepté',            cls:'b-accepte',  inProgress:true  },
  effectue: { key:'effectue', label:'Effectué',           cls:'b-effectue', inProgress:false },
  verse:    { key:'verse',    label:'Commission versée',  cls:'b-verse',    inProgress:false, euro:true },
  perdu:    { key:'perdu',    label:'Perdu',              cls:'b-perdu',    inProgress:false },
};

const FORMULES = {
  simple:   { key:'simple',   label:'Simple',   cls:'b-simple' },
  complete: { key:'complete', label:'Complète', cls:'b-complete' },
};

// Timeline templates by status (stage reached)
function buildTimeline(s, dates) {
  const steps = [
    { label:'Lead reçu',            d: dates.recu },
    { label:'Client contacté',      d: dates.contact },
    { label:'Devis envoyé',         d: dates.devis },
    { label:'Devis accepté',        d: dates.accepte },
    { label:'Déménagement prévu',   d: dates.move },
    { label:'Commission à verser',  d: dates.toPay },
    { label:'Commission versée',    d: dates.paid },
  ];
  let reached = { recu:1, devis:2, accepte:4, effectue:5, verse:7, perdu:1 }[s];
  return steps.map((st, i) => ({
    ...st,
    state: i < reached ? 'done' : (i === reached ? 'current' : 'todo'),
  }));
}

const RAW_LEADS = [
  { id:'L-2418', first:'Martin', last:'Dupont', phone:'06 12 44 89 21', email:'m.dupont@gmail.com',
    from:'Nice', to:'Milan', formule:'complete', value:2200, status:'accepte', notes:'3ème étage sans ascenseur. Piano droit à transporter.',
    submitted:'26 avr. 2026', move:'15 juil. 2026',
    dates:{recu:'26 avr. 2026, 14h32', contact:'27 avr. 2026', devis:'29 avr. 2026', accepte:'2 mai 2026', move:'15 juil. 2026', toPay:'', paid:''} },

  { id:'L-2416', first:'Sophie', last:'Lefebvre', phone:'07 81 23 56 90', email:'sophie.lefebvre@orange.fr',
    from:'Nice', to:'Paris', formule:'complete', value:3100, status:'effectue', notes:'Garde-meuble 2 semaines avant livraison.',
    submitted:'22 avr. 2026', move:'22 mai 2026',
    dates:{recu:'22 avr. 2026, 09h10', contact:'22 avr. 2026', devis:'24 avr. 2026', accepte:'26 avr. 2026', move:'22 mai 2026', toPay:'24 mai 2026', paid:''} },

  { id:'L-2411', first:'Thomas', last:'Bernard', phone:'06 45 78 12 34', email:'t.bernard@outlook.fr',
    from:'Nice', to:'Lyon', formule:'simple', value:1450, status:'verse', notes:'Studio meublé, accès facile.',
    submitted:'14 avr. 2026', move:'30 avr. 2026',
    dates:{recu:'14 avr. 2026, 16h05', contact:'15 avr. 2026', devis:'16 avr. 2026', accepte:'18 avr. 2026', move:'30 avr. 2026', toPay:'2 mai 2026', paid:'5 mai 2026'} },

  { id:'L-2420', first:'Élise', last:'Moreau', phone:'06 98 32 11 76', email:'elise.moreau@gmail.com',
    from:'Nice', to:'Bordeaux', formule:'complete', value:2750, status:'devis', notes:'Maison 4 pièces, jardin avec mobilier extérieur.',
    submitted:'24 mai 2026', move:'18 juin 2026',
    dates:{recu:'24 mai 2026, 11h47', contact:'25 mai 2026', devis:'27 mai 2026', accepte:'', move:'18 juin 2026', toPay:'', paid:''} },

  { id:'L-2421', first:'Julien', last:'Petit', phone:'07 62 09 45 18', email:'julien.petit@free.fr',
    from:'Nice', to:'Marseille', formule:'simple', value:980, status:'recu', notes:'',
    submitted:'28 mai 2026', move:'12 juin 2026',
    dates:{recu:'28 mai 2026, 18h22', contact:'', devis:'', accepte:'', move:'12 juin 2026', toPay:'', paid:''} },

  { id:'L-2419', first:'Nadia', last:'Benali', phone:'06 33 87 22 65', email:'n.benali@gmail.com',
    from:'Nice', to:'Genève', formule:'complete', value:3400, status:'accepte', notes:'Passage frontière, formalités douane mobilier.',
    submitted:'24 avr. 2026', move:'5 juil. 2026',
    dates:{recu:'24 avr. 2026, 10h15', contact:'25 avr. 2026', devis:'27 avr. 2026', accepte:'30 avr. 2026', move:'5 juil. 2026', toPay:'', paid:''} },

  { id:'L-2405', first:'Antoine', last:'Girard', phone:'06 71 54 88 02', email:'a.girard@gmail.com',
    from:'Nice', to:'La Rochelle', formule:'complete', value:2900, status:'verse', notes:'Déménagement familial, 5 pièces.',
    submitted:'28 mars 2026', move:'18 avr. 2026',
    dates:{recu:'28 mars 2026, 13h40', contact:'29 mars 2026', devis:'31 mars 2026', accepte:'3 avr. 2026', move:'18 avr. 2026', toPay:'20 avr. 2026', paid:'24 avr. 2026'} },

  { id:'L-2413', first:'Camille', last:'Roux', phone:'07 19 66 33 47', email:'camille.roux@orange.fr',
    from:'Nice', to:'Paris', formule:'simple', value:1600, status:'effectue', notes:'2 pièces, 4ème avec ascenseur.',
    submitted:'18 avr. 2026', move:'10 mai 2026',
    dates:{recu:'18 avr. 2026, 08h55', contact:'19 avr. 2026', devis:'20 avr. 2026', accepte:'22 avr. 2026', move:'10 mai 2026', toPay:'12 mai 2026', paid:''} },

  { id:'L-2408', first:'Hugo', last:'Faure', phone:'06 24 71 90 55', email:'hugo.faure@gmail.com',
    from:'Nice', to:'Toulouse', formule:'simple', value:1250, status:'perdu', notes:'A choisi un autre prestataire.',
    submitted:'5 avr. 2026', move:'—',
    dates:{recu:'5 avr. 2026, 15h30', contact:'6 avr. 2026', devis:'8 avr. 2026', accepte:'', move:'', toPay:'', paid:''} },

  { id:'L-2422', first:'Léa', last:'Fontaine', phone:'07 45 12 78 39', email:'lea.fontaine@gmail.com',
    from:'Nice', to:'Annecy', formule:'complete', value:2050, status:'recu', notes:'Cave à descendre, objets fragiles.',
    submitted:'29 mai 2026', move:'24 juin 2026',
    dates:{recu:'29 mai 2026, 09h48', contact:'', devis:'', accepte:'', move:'24 juin 2026', toPay:'', paid:''} },
];

function makeLead(r) {
  const rate = PARTNER.rate;
  const hasValue = !['recu'].includes(r.status);
  const commission = (r.status === 'perdu') ? 0 : Math.round(r.value * rate / 100);
  return {
    ...r,
    rate,
    estValue: hasValue ? r.value : null,
    commission: (r.status === 'recu' || r.status === 'perdu') ? null : commission,
    commissionStatus: r.status === 'verse' ? 'verse' : (r.status === 'effectue' ? 'valide' : 'attente'),
    timeline: buildTimeline(r.status, r.dates),
  };
}

const TIERS = [
  { key:'Bronze', rate:6,  range:'0 – 4 leads / mois', color:'#B0703A',
    perks:['Accès à la plateforme','Ressources marketing de base','Notifications en temps réel'] },
  { key:'Silver', rate:8,  range:'5 – 9 leads / mois', color:'#8A93A0',
    perks:['Tout Bronze','Support prioritaire','Kit co-marketing personnalisé','Relevé PDF mensuel'] },
  { key:'Gold',   rate:10, range:'10+ leads / mois',   color:'#C2992E',
    perks:['Tout Silver','Account manager dédié','Taux négociables sur gros volumes','Invitation aux événements LBC'] },
];

const RESOURCES = [
  { icon:'fileText', title:'Plaquette LBC Déménagement', meta:'PDF · 2 pages', desc:'À envoyer à vos clients.', action:'doc', doc:'plaquette' },
  { icon:'euroCircle', title:'Grille tarifaire 2026', meta:'PDF · 1 page', desc:'Formule Simple et Complète.', action:'doc', doc:'grille' },
  { icon:'image', title:'Kit réseaux sociaux', meta:'ZIP · 24 visuels', desc:'Visuels Instagram, Stories, formats carrés.', action:'zip' },
  { icon:'mail', title:'Email template client', meta:'DOCX', desc:"Modèle d'email à personnaliser.", action:'doc', doc:'email' },
  { icon:'code', title:'Widget lead form', meta:'HTML', desc:'À intégrer sur votre site web.', action:'copy' },
  { icon:'shield', title:'Guide partenaire', meta:'PDF · 12 pages', desc:'Comment maximiser vos commissions.', action:'doc', doc:'guide' },
];

// Monthly earned commissions (€) — for the dashboard area chart
const MONTHLY = [
  { m:'Déc', v:0 }, { m:'Jan', v:0 }, { m:'Fév', v:0 },
  { m:'Mar', v:0 }, { m:'Avr', v:0 }, { m:'Mai', v:0 },
];

// Notifications (newest first)
const NOTIFS = [];

Object.assign(window, {
  LBC_DATA: { PARTNER, RAW_LEADS, makeLead, STATUS, FORMULES, TIERS, RESOURCES, buildTimeline, MONTHLY, NOTIFS },
  euro, euro0,
});
