/* ===== Mi Urbania · Warranty categories (§6) — editable placeholder defaults ===== */
window.MU = window.MU || {};
(function (MU) {
  // durationDays are illustrative placeholders to be replaced by the Manual de Entrega.
  const Y = 365, M = 30;
  const WARRANTY_CATEGORIES = [
    {
      id: "estructura", icon: "columns", durationDays: 5 * Y, special: "legal",
      name_es: "Estructura", name_en: "Structural",
      desc_es: "Columnas, vigas, losas y cimientos.", desc_en: "Columns, beams, slabs and foundations.",
      covered_es: ["Grietas o movimiento en elementos de carga", "Asentamiento fuera de tolerancia"],
      covered_en: ["Cracks or movement in load-bearing elements", "Settlement beyond tolerance"],
      notCovered_es: ["Fisuras capilares cosméticas", "Alteraciones del propietario"],
      notCovered_en: ["Cosmetic hairline cracks", "Owner alterations"],
    },
    {
      id: "impermeabilizacion", icon: "umbrella", durationDays: 3 * Y,
      name_es: "Impermeabilización", name_en: "Waterproofing",
      desc_es: "Techos, terrazas y áreas húmedas.", desc_en: "Roofs, terraces and wet areas.",
      covered_es: ["Filtraciones por membranas", "Intrusión de agua en techo o terraza"],
      covered_en: ["Leaks through membranes", "Roof or terrace water intrusion"],
      notCovered_es: ["Daño por drenajes tapados sin limpiar"],
      notCovered_en: ["Damage from blocked drains not cleaned by owner"],
    },
    {
      id: "filtraciones", icon: "droplets", durationDays: Y,
      name_es: "Filtraciones", name_en: "Water infiltration",
      desc_es: "Filtraciones en ventanas, paredes y losas por defecto constructivo.", desc_en: "Leaks at windows, walls and slabs from construction defects.",
      covered_es: ["Filtraciones por defecto constructivo"],
      covered_en: ["Leaks from construction defects"],
      notCovered_es: ["Filtraciones por perforaciones del propietario"],
      notCovered_en: ["Leaks caused by owner drilling/penetrations"],
    },
    {
      id: "plomeria", icon: "pipe", durationDays: Y,
      name_es: "Plomería", name_en: "Plumbing",
      desc_es: "Instalaciones de plomería.", desc_en: "Plumbing installations.",
      covered_es: ["Fugas en tubería o juntas", "Mala pendiente, defectos de sifón/olor"],
      covered_en: ["Pipe/joint leaks", "Bad slope, trap/odor defects"],
      notCovered_es: ["Tapones por mal uso", "Aparatos fuera de garantía del fabricante"],
      notCovered_en: ["Clogs from misuse", "Fixtures past manufacturer warranty"],
    },
    {
      id: "electrico", icon: "zap", durationDays: Y,
      name_es: "Eléctrico", name_en: "Electrical",
      desc_es: "Instalaciones eléctricas.", desc_en: "Electrical installations.",
      covered_es: ["Circuitos muertos, mal cableado", "Tablero/etiquetado, tierra"],
      covered_en: ["Dead circuits, bad wiring", "Panel/labeling, grounding"],
      notCovered_es: ["Luminarias o equipos agregados por el propietario"],
      notCovered_en: ["Owner-added fixtures/appliances"],
    },
    {
      id: "sanitarios", icon: "faucet", durationDays: Y,
      name_es: "Sanitarios y grifería", name_en: "Fixtures & faucets",
      desc_es: "Sanitarios y grifería.", desc_en: "Sanitary fixtures and faucets.",
      covered_es: ["Instalación defectuosa", "Fugas al instalar"],
      covered_en: ["Defective install", "Leaks at install"],
      notCovered_es: ["Desgaste normal", "Rayones cosméticos reportados tarde"],
      notCovered_en: ["Normal wear", "Cosmetic scratches reported late"],
    },
    {
      id: "puertas", icon: "door", durationDays: Y,
      name_es: "Puertas", name_en: "Doors",
      desc_es: "Puertas interiores y de acceso.", desc_en: "Interior and access doors.",
      covered_es: ["Alabeo (\u201cse soplan\u201d), descuadre", "Marco fuera de escuadra, no asegura"],
      covered_en: ["Warping, misalignment", "Frame out-of-square, won't latch"],
      notCovered_es: ["Daño por impacto", "Rayones no anotados en la entrega"],
      notCovered_en: ["Impact damage", "Scratches not noted at handover"],
    },
    {
      id: "cerraduras", icon: "lock", durationDays: Y,
      name_es: "Cerraduras y herrajes", name_en: "Locks & hardware",
      desc_es: "Cerraduras, manijas y bisagras.", desc_en: "Locks, handles and hinges.",
      covered_es: ["Cerraduras trabadas o falladas", "Manijas o bisagras flojas"],
      covered_en: ["Jammed or failed locks", "Loose handles or hinges"],
      notCovered_es: ["Llaves perdidas", "Entrada forzada, mal uso"],
      notCovered_en: ["Lost keys", "Forced entry, misuse"],
    },
    {
      id: "vidrios", icon: "window", durationDays: Y,
      name_es: "Vidrios y ventanas", name_en: "Glass & windows",
      desc_es: "Instalación de vidrios y ventanas.", desc_en: "Glass and window installation.",
      covered_es: ["Defectos de instalación", "No corre/sella, empañamiento sellado"],
      covered_en: ["Install defects", "Won't slide/seal, sealed-unit fogging"],
      notCovered_es: ["Vidrio quebrado tras la entrega (impacto)"],
      notCovered_en: ["Glass breakage after handover (impact)"],
    },
    {
      id: "pisos", icon: "grid", durationDays: Y,
      name_es: "Pisos", name_en: "Floors",
      desc_es: "Pisos y enchapes.", desc_en: "Floors and tiling.",
      covered_es: ["Levantamiento, baldosas flojas/huecas", "Tono disparejo anotado en la entrega"],
      covered_en: ["Lifting/tenting, loose/hollow tiles", "Tone mismatch noted at handover"],
      notCovered_es: ["Rayones/manchas de uso", "Tono reportado tarde"],
      notCovered_en: ["Scratches/stains from use", "Tone issues reported late"],
    },
    {
      id: "pintura", icon: "roller", durationDays: 6 * M,
      name_es: "Pintura", name_en: "Paint",
      desc_es: "Pintura y acabados de pared.", desc_en: "Paint and wall finishes.",
      covered_es: ["Descascarado, aplicación defectuosa", "Corrida sobre superficies vecinas"],
      covered_en: ["Peeling, defective application", "Over-run onto adjacent surfaces"],
      notCovered_es: ["Desgaste normal, marcas", "Repintado del propietario"],
      notCovered_en: ["Normal wear, marks", "Owner repaints"],
    },
    {
      id: "aranitas", icon: "crack", durationDays: 8 * M, special: "crack-window",
      name_es: "Fisuras de repello \u201cara\u00f1itas\u201d", name_en: "Hairline plaster cracks",
      desc_es: "Fisuras de asentamiento, revisadas una vez en la ventana de 8 meses.", desc_en: "Settlement hairline cracks, reviewed once within the 8-month window.",
      covered_es: ["Fisuras de asentamiento revisadas una vez dentro de la ventana"],
      covered_en: ["Settlement hairline cracks reviewed once within the window"],
      notCovered_es: ["Fisuras reportadas tras la ventana", "Daño del propietario"],
      notCovered_en: ["Cracks reported after the window", "Owner damage"],
    },
    {
      id: "cieloraso", icon: "ceiling", durationDays: Y,
      name_es: "Cielo raso", name_en: "Ceilings",
      desc_es: "Cielos rasos y plafones.", desc_en: "Ceilings and soffits.",
      covered_es: ["Fisuras, pandeo", "Manchas de filtración por defecto"],
      covered_en: ["Fissures, sagging", "Leak stains from a defect"],
      notCovered_es: ["Daño por trabajo del propietario arriba de luminarias"],
      notCovered_en: ["Damage from owner work above fixtures"],
    },
    {
      id: "carpinteria", icon: "cabinet", durationDays: Y,
      name_es: "Carpintería — cocina y clósets", name_en: "Cabinetry (kitchen & closets)",
      desc_es: "Muebles de cocina y clósets.", desc_en: "Kitchen and closet cabinetry.",
      covered_es: ["Puertas/cajones descuadrados, rieles", "Unidades flojas, sello del mesón"],
      covered_en: ["Misaligned doors/drawers, rails", "Loose units, countertop seal"],
      notCovered_es: ["Hinchazón por mal uso", "Sobrecarga"],
      notCovered_en: ["Water swelling from misuse", "Overloading"],
    },
    {
      id: "hvac", icon: "wind", durationDays: Y,
      name_es: "Climatización", name_en: "HVAC",
      desc_es: "Aire acondicionado (si la unidad lo incluye).", desc_en: "Air conditioning (if the unit includes it).",
      covered_es: ["Defectos de instalación, fugas", "Controles que no responden"],
      covered_en: ["Install defects, leaks", "Unresponsive controls"],
      notCovered_es: ["Filtros descuidados", "Equipos movidos por el propietario"],
      notCovered_en: ["Filter neglect", "Owner-moved units"],
    },
    {
      id: "lineablanca", icon: "appliance", durationDays: Y, special: "mfr",
      name_es: "Línea blanca", name_en: "Appliances",
      desc_es: "Garantía del fabricante (pass-through).", desc_en: "Manufacturer warranty (pass-through).",
      covered_es: ["Según certificado del fabricante"],
      covered_en: ["Per manufacturer certificate"],
      notCovered_es: ["Cualquier cosa fuera de los términos del fabricante"],
      notCovered_en: ["Anything outside manufacturer terms"],
    },
    {
      id: "general", icon: "home", durationDays: Y,
      name_es: "General", name_en: "General",
      desc_es: "Todo lo no listado, relacionado con la construcción.", desc_en: "Anything not specifically listed, construction-related.",
      covered_es: ["Defectos constructivos no listados"],
      covered_en: ["Construction defects not listed elsewhere"],
      notCovered_es: ["Precios, mal uso, trabajo de terceros"],
      notCovered_en: ["Pricing, misuse, third-party work"],
    },
    {
      id: "areascomunes", icon: "building", durationDays: Y, special: "routed",
      name_es: "Áreas comunes", name_en: "Common areas",
      desc_es: "Elevadores, planta de tratamiento, piscina, portón.", desc_en: "Elevators, treatment plant, pool, gate.",
      covered_es: ["Se registra y enruta a la administración / PH"],
      covered_en: ["Logged and routed to building administration / PH"],
      notCovered_es: [],
      notCovered_en: [],
    },
  ];

  const CAT_BY_ID = {};
  WARRANTY_CATEGORIES.forEach((c) => (CAT_BY_ID[c.id] = c));

  MU.WARRANTY_CATEGORIES = WARRANTY_CATEGORIES;
  MU.CAT_BY_ID = CAT_BY_ID;

  // Compute coverage for a category given a handover date and "now".
  MU.computeCoverage = function (cat, handoverDate, now) {
    if (!cat) return null;
    if (cat.special === "routed") return { status: "routed" };
    const expiry = MU.addDays(handoverDate, cat.durationDays);
    const daysLeft = MU.daysBetween(now, expiry);
    const total = cat.durationDays;
    const elapsed = MU.daysBetween(handoverDate, now);
    const fraction = Math.max(0, Math.min(1, daysLeft / total)); // remaining fraction
    let status;
    if (cat.special === "crack-window") {
      status = daysLeft > 0 ? "crack" : "expired";
    } else if (daysLeft <= 0) status = "expired";
    else if (daysLeft <= 60) status = "soon";
    else status = "active";
    return { expiry, daysLeft, total, elapsed, fraction, status };
  };
})(window.MU);
