// ArtisanFlow — données de démonstration
// Multi-métiers : plomberie, électricité, peinture
//
// Production (défaut) : ne pas mélanger devis / clients / stats de démonstration dans l’UI.
// — Mettre `true` pour forcer la démo en local, ou
// — `afSetDemoDataEnabled(true)` / Profil → Cloud → « Démonstration », ou
// — `localStorage.setItem('instantdevis_enable_demo', 'true')` puis recharger.
const AF_DEMO_ENABLED = false;
const _LS_DEMO = 'instantdevis_enable_demo';

function afIsDemoDataEnabled() {
  if (AF_DEMO_ENABLED) return true;
  try {
    return localStorage.getItem(_LS_DEMO) === 'true';
  } catch (e) {
    return false;
  }
}

function afSetDemoDataEnabled(on) {
  try {
    if (on) localStorage.setItem(_LS_DEMO, 'true');
    else localStorage.removeItem(_LS_DEMO);
  } catch (e) { /* ignore */ }
}

/**
 * Clients pour les listes : `AF_CLIENTS` uniquement si la démo est active, sinon clients dérivés des devis réels.
 */
function afGetClientsListForUI(allDevis) {
  if (afIsDemoDataEnabled() && typeof AF_CLIENTS !== 'undefined') {
    return AF_CLIENTS;
  }
  const map = new Map();
  for (const q of (allDevis || [])) {
    if (!q) continue;
    const rawId = q.client != null ? q.client : q.clientId;
    const key = (rawId != null && String(rawId).length) ? String(rawId) : 'anon';
    if (!map.has(key)) {
      map.set(key, {
        id: key,
        name: String(q.clientName || '').trim() || 'Client',
        address: '',
        phone: '',
        projects: 0,
        trade: q.trade || 'multi',
      });
    }
    const c = map.get(key);
    c.projects += 1;
    if (q.clientName) c.name = String(q.clientName).trim() || c.name;
  }
  return Array.from(map.values()).sort((a, b) => String(a.name).localeCompare(String(b.name), 'fr'));
}

const AF_CLIENTS = [
  { id: 'c1', name: 'Mme Dubois', address: '12 rue des Lilas, Lyon', phone: '06 12 34 56 78', projects: 3, trade: 'plomberie' },
  { id: 'c2', name: 'M. Moreau', address: '45 av. Jean Jaurès, Villeurbanne', phone: '06 98 76 54 32', projects: 1, trade: 'electricite' },
  { id: 'c3', name: 'SCI Bellecour', address: '3 pl. Bellecour, Lyon', phone: '04 72 11 22 33', projects: 5, trade: 'multi' },
  { id: 'c4', name: 'Boulangerie Petit', address: '78 rue de la République, Lyon', phone: '06 45 67 89 10', projects: 2, trade: 'peinture' },
  { id: 'c5', name: 'M. & Mme Garnier', address: '22 chemin du Bois, Caluire', phone: '06 34 56 78 90', projects: 1, trade: 'plomberie' },
  { id: 'c6', name: 'Cabinet Médical Rive', address: '8 quai Claude Bernard, Lyon', phone: '04 78 55 44 33', projects: 4, trade: 'electricite' },
];

const AF_CATALOG = [
  // Plomberie
  { id: 'p1', trade: 'plomberie', label: 'Mitigeur thermostatique', unit: 'pce', price: 185, alt: { label: 'Mitigeur standard Grohe', price: 142, save: 43 } },
  { id: 'p2', trade: 'plomberie', label: 'Chauffe-eau 200L électrique', unit: 'pce', price: 620, alt: { label: 'CE 200L Atlantic promo', price: 489, save: 131 } },
  { id: 'p3', trade: 'plomberie', label: 'Remplacement WC suspendu', unit: 'pce', price: 780, alt: null },
  { id: 'p4', trade: 'plomberie', label: 'Main d\'œuvre plomberie', unit: 'h', price: 55, alt: null },
  { id: 'p5', trade: 'plomberie', label: 'Tube cuivre Ø16', unit: 'm', price: 8.5, alt: { label: 'Tube PER multicouche', price: 5.2, save: 3.3 } },
  // Électricité
  { id: 'e1', trade: 'electricite', label: 'Tableau électrique 3 rangées', unit: 'pce', price: 340, alt: { label: 'Tableau Legrand éco', price: 268, save: 72 } },
  { id: 'e2', trade: 'electricite', label: 'Prise 2P+T encastrée', unit: 'pce', price: 18, alt: { label: 'Prise sans marque', price: 9, save: 9 } },
  { id: 'e3', trade: 'electricite', label: 'Disjoncteur différentiel 30mA', unit: 'pce', price: 85, alt: null },
  { id: 'e4', trade: 'electricite', label: 'Main d\'œuvre électricien', unit: 'h', price: 62, alt: null },
  { id: 'e5', trade: 'electricite', label: 'Câble 3G2.5 rigide', unit: 'm', price: 3.8, alt: null },
  // Peinture
  { id: 'pe1', trade: 'peinture', label: 'Peinture acrylique mate 10L', unit: 'pot', price: 95, alt: { label: 'Peinture Tollens pro', price: 72, save: 23 } },
  { id: 'pe2', trade: 'peinture', label: 'Préparation murs (ponçage)', unit: 'm²', price: 12, alt: null },
  { id: 'pe3', trade: 'peinture', label: 'Application 2 couches', unit: 'm²', price: 18, alt: null },
  { id: 'pe4', trade: 'peinture', label: 'Enduit de rebouchage', unit: 'kg', price: 6.5, alt: null },
];

// Devis (notes) — états mixtes pour montrer tout le workflow
const AF_QUOTES = [
  {
    id: 'Q-2026-041', client: 'c1', clientName: 'Mme Dubois',
    title: 'Remplacement chauffe-eau + mitigeur SDB',
    status: 'signe', amount: 1450, paid: 435, dueDate: '2026-04-28',
    createdAt: '2026-04-10', items: 4, deposit: 30, trade: 'plomberie',
  },
  {
    id: 'Q-2026-042', client: 'c2', clientName: 'M. Moreau',
    title: 'Rénovation tableau électrique',
    status: 'envoye', amount: 2890, paid: 0, dueDate: '2026-04-22',
    createdAt: '2026-04-12', items: 6, deposit: 30, trade: 'electricite',
  },
  {
    id: 'Q-2026-043', client: 'c3', clientName: 'SCI Bellecour',
    title: 'Peinture hall d\'immeuble 85m²',
    status: 'retard', amount: 3650, paid: 1095, dueDate: '2026-04-05',
    createdAt: '2026-03-20', items: 5, deposit: 30, trade: 'peinture',
  },
  {
    id: 'Q-2026-044', client: 'c4', clientName: 'Boulangerie Petit',
    title: 'Rafraîchissement boutique',
    status: 'brouillon', amount: 980, paid: 0, dueDate: null,
    createdAt: '2026-04-18', items: 3, deposit: 30, trade: 'peinture',
  },
  {
    id: 'Q-2026-045', client: 'c5', clientName: 'M. & Mme Garnier',
    title: 'Dépannage fuite cuisine',
    status: 'paye', amount: 320, paid: 320, dueDate: '2026-04-01',
    createdAt: '2026-03-25', items: 2, deposit: 0, trade: 'plomberie',
  },
  {
    id: 'Q-2026-046', client: 'c6', clientName: 'Cabinet Médical Rive',
    title: 'Mise aux normes éclairage',
    status: 'signe', amount: 4200, paid: 1260, dueDate: '2026-05-10',
    createdAt: '2026-04-08', items: 8, deposit: 30, trade: 'electricite',
  },
  {
    id: 'Q-2026-047', client: 'c1', clientName: 'Mme Dubois',
    title: 'Devis supplémentaire robinetterie cuisine',
    status: 'envoye', amount: 560, paid: 0, dueDate: '2026-04-30',
    createdAt: '2026-04-15', items: 2, deposit: 0, trade: 'plomberie',
  },
];

// Agrégats pour dashboard
const AF_STATS = {
  monthRevenue: 12450,      // encaissé ce mois
  monthTarget: 18000,       // objectif
  pendingAmount: 7970,      // devis envoyés non signés
  overdueAmount: 2555,      // retards
  overdueCount: 1,
  signedThisMonth: 3,
  notesThisWeek: 7,
};

// Status metadata
const AF_STATUS = {
  brouillon: { label: 'Brouillon', color: '#6B7280', bg: 'rgba(107,114,128,0.15)' },
  sent:      { label: 'Envoyé',    color: '#3B82F6', bg: 'rgba(59,130,246,0.15)' },
  envoye:    { label: 'Envoyé',    color: '#3B82F6', bg: 'rgba(59,130,246,0.15)' },
  signe:     { label: 'Signé',     color: '#10B981', bg: 'rgba(16,185,129,0.15)' },
  paye:      { label: 'Payé',      color: '#059669', bg: 'rgba(5,150,105,0.2)' },
  retard:    { label: 'En retard', color: '#FF6B00', bg: 'rgba(255,107,0,0.18)' },
};

const AF_TRADE_META = {
  plomberie:   { label: 'Plomberie',    color: '#0EA5E9' },
  electricite: { label: 'Électricité',  color: '#EAB308' },
  peinture:    { label: 'Peinture',     color: '#A855F7' },
  multi:       { label: 'Multi-métier', color: '#94A3B8' },
};

Object.assign(window, {
  AF_DEMO_ENABLED,
  afIsDemoDataEnabled,
  afSetDemoDataEnabled,
  afGetClientsListForUI,
  AF_CLIENTS, AF_CATALOG, AF_QUOTES, AF_STATS, AF_STATUS, AF_TRADE_META,
});
