import type { Lead, LeadFoto, LeadNota } from '@/db/schema';

export type Zona = NonNullable<Lead['tipoReforma']>;

export type ZonaAgrupada = {
  zona: Zona;
  antes: LeadFoto[];
  despues: LeadFoto[];
  notas: LeadNota[];
};

// Agrupa fotos y notas por zona, con fallback al tipo de reforma del lead para las filas sin zona
// (datos antiguos). Conserva el orden en que aparece cada zona. Función pura para poder testearla.
export function agruparPorZona(
  fotos: LeadFoto[],
  notas: LeadNota[],
  tipoLead: Zona,
): ZonaAgrupada[] {
  const mapa = new Map<Zona, ZonaAgrupada>();
  const slot = (zona: Zona): ZonaAgrupada => {
    let s = mapa.get(zona);
    if (!s) {
      s = { zona, antes: [], despues: [], notas: [] };
      mapa.set(zona, s);
    }
    return s;
  };

  for (const f of fotos) {
    const s = slot((f.zona ?? tipoLead) as Zona);
    if (f.momento === 'despues') s.despues.push(f);
    else s.antes.push(f);
  }
  for (const n of notas) {
    slot((n.zona ?? tipoLead) as Zona).notas.push(n);
  }

  return Array.from(mapa.values());
}
