/* ===== Mi Urbania · Issue catalog (§7.2) + rooms ===== */
window.MU = window.MU || {};
(function (MU) {
  const ROOMS = [
    { id: "cocina", icon: "kitchen", name_es: "Cocina", name_en: "Kitchen" },
    { id: "bano", icon: "bath", name_es: "Baño", name_en: "Bathroom" },
    { id: "sala", icon: "sofa", name_es: "Sala", name_en: "Living" },
    { id: "cuarto", icon: "bed", name_es: "Cuarto", name_en: "Bedroom" },
    { id: "balcon", icon: "balcony", name_es: "Balcón", name_en: "Balcony" },
    { id: "general", icon: "home", name_es: "General", name_en: "General" },
    { id: "comun", icon: "building", name_es: "Áreas comunes", name_en: "Common areas" },
  ];

  // Category-level guidance — gives every issue a populated detail sheet.
  const CAT_GUIDE = {
    puertas: {
      meaning_es: "Suele ser un ajuste de marco o bisagras, normal en los primeros meses por asentamiento.",
      meaning_en: "Usually a frame or hinge adjustment, normal in the first months due to settlement.",
      action_es: "Repórtalo con foto; un técnico ajusta o realinea en una visita.",
      action_en: "Report it with a photo; a technician adjusts or realigns in one visit.",
      photoTip_es: "Toma la puerta completa y un acercamiento del punto que roza o no cierra.",
      photoTip_en: "Shoot the full door plus a close-up of the spot that rubs or won't close.",
    },
    cerraduras: {
      meaning_es: "Herraje suelto o mecanismo que necesita ajuste o reemplazo.",
      meaning_en: "Loose hardware or a mechanism that needs adjustment or replacement.",
      action_es: "Repórtalo; no fuerces la llave para evitar romper el mecanismo.",
      action_en: "Report it; don't force the key to avoid breaking the mechanism.",
      photoTip_es: "Fotografía la cerradura y la manija de cerca, con buena luz.",
      photoTip_en: "Photograph the lock and handle up close, with good light.",
    },
    vidrios: {
      meaning_es: "Defecto de instalación o sellado de la ventana o el vidrio.",
      meaning_en: "An install or sealing defect in the window or glass.",
      action_es: "Repórtalo con foto del vidrio y del marco completo.",
      action_en: "Report it with a photo of the glass and the full frame.",
      photoTip_es: "Incluye el marco completo y un acercamiento del defecto o la filtración.",
      photoTip_en: "Include the full frame plus a close-up of the defect or leak.",
    },
    filtraciones: {
      meaning_es: "Entrada de agua por defecto constructivo; conviene atenderla pronto.",
      meaning_en: "Water entry from a construction defect; best addressed promptly.",
      action_es: "Reporta de inmediato con foto; seca la zona y evita tapar la fuente.",
      action_en: "Report immediately with a photo; dry the area and don't cover the source.",
      photoTip_es: "Capta la mancha o el agua y, si puedes, de dónde proviene.",
      photoTip_en: "Capture the stain or water and, if you can, where it comes from.",
    },
    impermeabilizacion: {
      meaning_es: "Posible falla de membrana en techo, terraza o área húmeda.",
      meaning_en: "Possible membrane failure on roof, terrace or wet area.",
      action_es: "Reporta con foto; mantén drenajes despejados mientras tanto.",
      action_en: "Report with a photo; keep drains clear in the meantime.",
      photoTip_es: "Muestra el área afectada y el agua empozada si la hay.",
      photoTip_en: "Show the affected area and any ponding water.",
    },
    aranitas: {
      meaning_es: "Fisuras capilares normales por asentamiento. Se revisan una sola vez dentro de la ventana de 8 meses.",
      meaning_en: "Normal hairline cracks from settlement. Reviewed once within the 8-month window.",
      action_es: "Junta todas las fisuras y repórtalas en un solo reporte para una visita.",
      action_en: "Gather all the cracks and report them together for one visit.",
      photoTip_es: "Toma cada fisura de cerca y una foto general de la pared.",
      photoTip_en: "Shoot each crack up close plus one wide photo of the wall.",
    },
    estructura: {
      meaning_es: "Puede afectar elementos de carga. Lo tratamos como prioridad.",
      meaning_en: "May affect load-bearing elements. We treat it as a priority.",
      action_es: "Repórtalo de inmediato; no realices trabajos sobre el área.",
      action_en: "Report it immediately; don't do any work over the area.",
      photoTip_es: "Foto del elemento completo (columna/viga) y un acercamiento de la grieta con algo de escala.",
      photoTip_en: "Photo of the full element (column/beam) and a close-up of the crack with something for scale.",
    },
    pisos: {
      meaning_es: "Defecto de instalación o movimiento del contrapiso.",
      meaning_en: "An install defect or movement in the substrate.",
      action_es: "Repórtalo con foto; evita golpear la baldosa floja.",
      action_en: "Report it with a photo; avoid striking the loose tile.",
      photoTip_es: "Foto general y acercamiento; marca la baldosa con cinta si suena hueca.",
      photoTip_en: "Wide photo and close-up; tape the tile if it sounds hollow.",
    },
    pintura: {
      meaning_es: "Aplicación defectuosa o terminación que necesita retoque.",
      meaning_en: "Defective application or a finish that needs touch-up.",
      action_es: "Repórtalo con foto bajo luz natural.",
      action_en: "Report it with a photo in natural light.",
      photoTip_es: "Toma la pared completa y el detalle, evitando reflejos.",
      photoTip_en: "Shoot the full wall and the detail, avoiding glare.",
    },
    plomeria: {
      meaning_es: "Posible fuga, mala pendiente o defecto del sifón.",
      meaning_en: "Possible leak, bad slope or trap defect.",
      action_es: "Cierra la llave de paso si hay fuga activa y repórtalo.",
      action_en: "Shut the stop valve if there's an active leak and report it.",
      photoTip_es: "Foto del punto de fuga y del agua acumulada.",
      photoTip_en: "Photo of the leak point and any pooled water.",
    },
    sanitarios: {
      meaning_es: "Defecto en la instalación del sanitario o la grifería.",
      meaning_en: "A defect in the fixture or faucet installation.",
      action_es: "Repórtalo con foto; no aprietes a la fuerza.",
      action_en: "Report it with a photo; don't over-tighten.",
      photoTip_es: "Capta la pieza y el punto exacto del problema.",
      photoTip_en: "Capture the fixture and the exact problem point.",
    },
    electrico: {
      meaning_es: "Posible defecto de instalación eléctrica.",
      meaning_en: "Possible electrical install defect.",
      action_es: "No manipules el tablero; repórtalo y un técnico lo revisa.",
      action_en: "Don't handle the panel; report it and a technician checks it.",
      photoTip_es: "Foto del tomacorriente, interruptor o tablero afectado.",
      photoTip_en: "Photo of the outlet, switch or panel affected.",
    },
    carpinteria: {
      meaning_es: "Ajuste de puertas, cajones o herrajes de los muebles.",
      meaning_en: "Adjustment of cabinet doors, drawers or hardware.",
      action_es: "Repórtalo con foto del mueble y la pieza afectada.",
      action_en: "Report it with a photo of the unit and the affected part.",
      photoTip_es: "Muestra el mueble completo y el detalle del problema.",
      photoTip_en: "Show the full unit and the detail of the issue.",
    },
    hvac: {
      meaning_es: "Defecto de instalación o control del aire acondicionado.",
      meaning_en: "An install or control defect in the AC.",
      action_es: "Revisa el filtro; si persiste, repórtalo con foto.",
      action_en: "Check the filter; if it persists, report it with a photo.",
      photoTip_es: "Foto de la unidad y, si aplica, del agua o la fuga.",
      photoTip_en: "Photo of the unit and, if relevant, the water or leak.",
    },
    cieloraso: {
      meaning_es: "Fisura, pandeo o mancha de filtración en el cielo raso.",
      meaning_en: "Fissure, sagging or leak stain on the ceiling.",
      action_es: "Repórtalo con foto; si hay agua, atiéndelo pronto.",
      action_en: "Report it with a photo; if there's water, address it promptly.",
      photoTip_es: "Capta el área completa del cielo raso y el detalle.",
      photoTip_en: "Capture the full ceiling area and the detail.",
    },
    areascomunes: {
      meaning_es: "Esto corresponde a las áreas comunes del edificio.",
      meaning_en: "This relates to the building's common areas.",
      action_es: "Lo registramos y enrutamos a la administración / PH.",
      action_en: "We log it and route it to the administration / PH.",
      photoTip_es: "Foto del área o equipo afectado.",
      photoTip_en: "Photo of the affected area or equipment.",
    },
    general: {
      meaning_es: "Lo clasificamos para darte la mejor respuesta.",
      meaning_en: "We'll classify it to give you the best answer.",
      action_es: "Repórtalo con foto y una breve descripción.",
      action_en: "Report it with a photo and a short description.",
      photoTip_es: "Una foto clara y bien iluminada ayuda mucho.",
      photoTip_en: "A clear, well-lit photo helps a lot.",
    },
  };

  // [id, name_es, name_en, room, categoryId, severity, coverageNote?]
  const RAW = [
    // Puertas
    ["door-rub", "Puerta que roza el marco", "Door rubs the frame", "general", "puertas", "functional"],
    ["door-misalign", "Puerta descuadrada (no cierra, diagonal)", "Misaligned door (won't close, diagonal)", "general", "puertas", "functional"],
    ["door-warp", "Puerta soplada o alabeada", "Warped door", "general", "puertas", "functional"],
    ["door-scratch", "Rayón o marca en la puerta", "Scratch or mark on the door", "general", "puertas", "cosmetic", "scratch"],
    ["door-hinge", "Bisagras flojas o chirriantes", "Loose or squeaky hinges", "general", "puertas", "functional"],
    ["door-latch", "Puerta no asegura / pestillo no engancha", "Door won't latch", "general", "puertas", "functional"],
    ["door-toilet", "Puerta de baño golpea el sanitario", "Bathroom door hits the toilet", "bano", "puertas", "functional"],
    ["door-seal", "Burlete / sello de puerta desprendido", "Detached door weatherstrip", "general", "puertas", "cosmetic"],
    // Cerraduras
    ["lock-jam", "Cerradura trabada", "Jammed lock", "general", "cerraduras", "functional"],
    ["lock-key", "La llave no gira", "Key won't turn", "general", "cerraduras", "functional"],
    ["lock-handle", "Manija o pomo flojo", "Loose handle or knob", "general", "cerraduras", "cosmetic"],
    ["lock-secure", "Cerradura no asegura", "Lock won't secure", "general", "cerraduras", "urgent"],
    ["lock-smart", "Cerradura electrónica / smart no responde", "Smart lock unresponsive", "general", "cerraduras", "functional"],
    // Vidrios y ventanas
    ["glass-broken", "Vidrio quebrado o estrellado", "Cracked or shattered glass", "general", "vidrios", "functional", "glass"],
    ["glass-scratch", "Vidrio rayado (defecto de entrega)", "Scratched glass (delivery defect)", "general", "vidrios", "cosmetic"],
    ["window-slide", "Ventana no corre", "Window won't slide", "general", "vidrios", "functional"],
    ["window-seal", "Ventana no sella (entra aire o agua)", "Window won't seal (air/water)", "general", "vidrios", "functional"],
    ["window-leak", "Filtración por ventana", "Leak at the window", "general", "vidrios", "functional"],
    ["window-fog", "Empañamiento entre los vidrios", "Fogging between panes", "general", "vidrios", "functional"],
    ["window-screen", "Mosquitero dañado o suelto", "Damaged or loose screen", "general", "vidrios", "cosmetic"],
    ["window-square", "Marco de ventana descuadrado", "Window frame out of square", "general", "vidrios", "functional"],
    // Filtraciones y humedad
    ["leak-ceiling", "Filtración en el techo / cielo raso", "Roof or ceiling leak", "general", "filtraciones", "functional"],
    ["leak-wall", "Filtración en pared", "Wall leak", "general", "filtraciones", "functional"],
    ["leak-above", "Filtración desde el apartamento de arriba", "Leak from the unit above", "general", "filtraciones", "functional"],
    ["damp-ceiling", "Humedad o manchas en cielo raso", "Damp or stains on ceiling", "general", "cieloraso", "functional"],
    ["mold", "Moho", "Mold", "bano", "filtraciones", "functional"],
    ["leak-balcony-door", "Filtración en puerta de balcón", "Balcony-door leak", "balcon", "filtraciones", "functional"],
    ["ponding-balcony", "Agua empozada en balcón o terraza", "Ponding water on balcony/terrace", "balcon", "impermeabilizacion", "functional"],
    ["damp-smell", "Olor a humedad persistente", "Persistent damp smell", "general", "filtraciones", "functional"],
    // Grietas y fisuras
    ["crack-hairline", "Fisuras capilares \u201cara\u00f1itas\u201d", "Hairline cracks", "general", "aranitas", "cosmetic"],
    ["crack-wall", "Grieta en pared", "Wall crack", "general", "aranitas", "cosmetic"],
    ["crack-ceiling", "Grieta en cielo raso", "Ceiling crack", "general", "cieloraso", "functional"],
    ["crack-column", "Grieta en columna o viga", "Crack in a column or beam", "general", "estructura", "urgent"],
    ["gap-wall-ceiling", "Separación entre pared y techo", "Gap between wall and ceiling", "general", "estructura", "functional"],
    ["plaster-hollow", "Repello desprendido o hueco", "Detached or hollow plaster", "general", "pintura", "cosmetic"],
    ["crack-floor", "Fisura en piso", "Floor crack", "general", "pisos", "functional"],
    // Pisos
    ["floor-tent", "Piso levantado o \u201cabombado\u201d", "Lifted or tented floor", "general", "pisos", "functional"],
    ["tile-loose", "Baldosa floja / suena hueco", "Loose tile (hollow sound)", "general", "pisos", "functional"],
    ["tile-crack", "Baldosa quebrada", "Cracked tile", "general", "pisos", "cosmetic"],
    ["tile-tone", "Diferencia de tono entre baldosas", "Tile tone/color mismatch", "general", "pisos", "cosmetic", "tone"],
    ["grout", "Fragua manchada o agrietada", "Stained or cracked grout", "general", "pisos", "cosmetic"],
    ["floor-uneven", "Desnivel en el piso", "Uneven floor", "general", "pisos", "functional"],
    ["floor-scratch", "Rayones en el piso", "Floor scratches", "general", "pisos", "cosmetic"],
    // Pintura y paredes
    ["paint-peel", "Pintura descascarada", "Peeling paint", "general", "pintura", "cosmetic"],
    ["paint-drip", "Manchas o goteos en la pintura", "Paint stains or drips", "general", "pintura", "cosmetic"],
    ["paint-tone", "Diferencia de tono en la pintura", "Paint tone difference", "general", "pintura", "cosmetic"],
    ["paint-overrun", "Pintura corrida sobre otra superficie", "Paint over-run onto adjacent surface", "general", "pintura", "cosmetic"],
    ["wall-bubble", "Pared con burbujas", "Bubbling wall", "general", "pintura", "cosmetic"],
    ["wall-plumb", "Pared no quedó a plomo", "Wall out of plumb", "general", "estructura", "functional"],
    // Sanitarios y plomería
    ["toilet-rock", "Inodoro flojo o se mueve", "Loose or rocking toilet", "bano", "sanitarios", "functional"],
    ["toilet-flush", "Inodoro no descarga bien", "Toilet won't flush properly", "bano", "sanitarios", "functional"],
    ["toilet-leak", "Fuga en el inodoro", "Toilet leak", "bano", "plomeria", "functional"],
    ["faucet-drip", "Llave o grifo que gotea", "Dripping faucet", "bano", "sanitarios", "functional"],
    ["low-pressure", "Baja presión de agua", "Low water pressure", "general", "plomeria", "functional"],
    ["drain-slow", "Drenaje tapado o lento", "Slow or clogged drain", "general", "plomeria", "functional"],
    ["sink-leak", "Fuga bajo el lavamanos", "Leak under the sink", "bano", "plomeria", "functional"],
    ["heater", "Calentador de agua no funciona", "Water heater not working", "general", "plomeria", "functional"],
    ["sewer-smell", "Olor a alcantarilla (sifón)", "Sewer smell (trap issue)", "bano", "plomeria", "functional"],
    ["shower-flow", "Regadera / ducha con poco flujo", "Weak shower flow", "bano", "sanitarios", "functional"],
    // Eléctrico
    ["outlet-dead", "Tomacorriente sin energía", "Dead outlet", "general", "electrico", "functional"],
    ["switch", "Interruptor no funciona", "Switch not working", "general", "electrico", "functional"],
    ["breaker", "El breaker se dispara", "Breaker keeps tripping", "general", "electrico", "urgent"],
    ["light-fixture", "Luminaria no enciende", "Light fixture won't turn on", "general", "electrico", "functional"],
    ["doorbell", "Timbre no funciona", "Doorbell not working", "general", "electrico", "cosmetic"],
    ["panel-label", "Tablero mal etiquetado", "Mislabeled panel", "general", "electrico", "cosmetic"],
    ["no-ground", "Toma sin polo a tierra", "Ungrounded outlet", "general", "electrico", "urgent"],
    ["intercom", "Intercomunicador / videoportero falla", "Intercom / video-door fails", "general", "electrico", "functional"],
    // Cocina y clósets
    ["cabinet-misalign", "Gabinete desnivelado", "Misaligned cabinet", "cocina", "carpinteria", "cosmetic"],
    ["cabinet-door", "Puerta de gabinete no cierra", "Cabinet door won't close", "cocina", "carpinteria", "functional"],
    ["drawer-track", "Cajón se sale del riel", "Drawer off its track", "cocina", "carpinteria", "functional"],
    ["counter-crack", "Tope o mesón rajado", "Cracked countertop", "cocina", "carpinteria", "cosmetic"],
    ["counter-seal", "Sello del mesón despegado", "Loose countertop sealant", "cocina", "carpinteria", "cosmetic"],
    ["closet-hinge", "Bisagra de clóset dañada", "Damaged closet hinge", "cuarto", "carpinteria", "functional"],
    ["sink-loose", "Fregadero suelto", "Loose sink", "cocina", "carpinteria", "functional"],
    ["closet-rod", "Barra / repisa de clóset caída", "Fallen closet rod/shelf", "cuarto", "carpinteria", "functional"],
    // HVAC
    ["ac-cool", "Aire acondicionado no enfría", "AC not cooling", "general", "hvac", "functional"],
    ["ac-leak", "AC gotea agua", "AC leaking water", "general", "hvac", "functional"],
    ["thermostat", "Termostato no responde", "Thermostat unresponsive", "general", "hvac", "functional"],
    ["ac-noise", "Ruido o vibración en el AC", "Noisy / vibrating AC", "general", "hvac", "cosmetic"],
    ["ac-smell", "Mal olor del AC", "Bad smell from AC", "general", "hvac", "functional"],
    // Balcón y exterior
    ["railing", "Baranda floja", "Loose railing", "balcon", "estructura", "urgent"],
    ["balcony-drain", "Desagüe de balcón tapado", "Clogged balcony drain", "balcon", "impermeabilizacion", "functional"],
    ["balcony-crack", "Grieta en piso de balcón", "Balcony floor crack", "balcon", "pisos", "functional"],
    ["balcony-seal", "Sello de balcón deteriorado", "Deteriorated balcony seal", "balcon", "impermeabilizacion", "functional"],
    ["gate-individual", "Reja o portón individual falla", "Individual gate/grille fails", "exterior", "cerraduras", "functional"],
    // Áreas comunes
    ["elevator", "Elevador detenido o desnivelado", "Elevator stopped or unlevel", "comun", "areascomunes", "functional"],
    ["water-plant", "Planta de tratamiento de agua", "Water treatment plant", "comun", "areascomunes", "functional"],
    ["pool", "Problema en piscina", "Pool issue", "comun", "areascomunes", "functional"],
    ["main-gate", "Falla en portón o acceso vehicular", "Gate / vehicle access failure", "comun", "areascomunes", "functional"],
    ["parking", "Estacionamiento (medida / acceso)", "Parking (size / access)", "comun", "areascomunes", "functional"],
    ["common-light", "Iluminación de áreas comunes", "Common-area lighting", "comun", "areascomunes", "cosmetic"],
    ["water-pump", "Bomba de agua / cisterna", "Water pump / cistern", "comun", "areascomunes", "functional"],
    // Estructural urgente
    ["struct-active", "Grieta estructural activa", "Active structural crack", "general", "estructura", "urgent"],
    ["floor-sink", "Hundimiento del piso", "Floor settlement / sinking", "general", "estructura", "urgent"],
    ["out-of-plumb", "Elemento desplomado (fuera de plomo)", "Element out of plumb", "general", "estructura", "urgent"],
    ["major-leak", "Filtración mayor / inundación", "Major leak / flooding", "general", "filtraciones", "urgent"],
  ];

  // Per-issue overrides for notable cases
  const OVERRIDES = {
    "door-warp": { meaning_es: "La hoja se \u201csopla\u201d por humedad o temperatura. Es un defecto cubierto en garantía.", meaning_en: "The leaf warps from humidity or temperature. It's a covered defect." },
    "door-scratch": { coverageNote_es: "Solo cubre si el rayón fue anotado en el acta de entrega.", coverageNote_en: "Only covered if the scratch was noted in the handover record." },
    "glass-broken": { coverageNote_es: "El vidrio quebrado por impacto después de la entrega no está cubierto.", coverageNote_en: "Glass breakage from impact after handover is not covered." },
    "tile-tone": { coverageNote_es: "Cubre si la diferencia de tono (mate vs. brillante) se anotó en la entrega.", coverageNote_en: "Covered if the tone difference (matte vs. glossy) was noted at handover." },
    "railing": { meaning_es: "Una baranda floja es un riesgo de seguridad. Lo atendemos de inmediato.", meaning_en: "A loose railing is a safety risk. We address it immediately." },
    "crack-column": { meaning_es: "Una grieta en columna o viga puede ser estructural. Prioridad máxima.", meaning_en: "A crack in a column or beam may be structural. Top priority." },
  };

  const ISSUES = RAW.map(([id, name_es, name_en, room, categoryId, severity, note]) => {
    const g = CAT_GUIDE[categoryId] || CAT_GUIDE.general;
    const o = OVERRIDES[id] || {};
    const noteMap = { scratch: ["door-scratch"], glass: ["glass-broken"], tone: ["tile-tone"] };
    return {
      id, name_es, name_en, room, categoryId, severity,
      meaning_es: o.meaning_es || g.meaning_es, meaning_en: o.meaning_en || g.meaning_en,
      action_es: o.action_es || g.action_es, action_en: o.action_en || g.action_en,
      photoTip_es: o.photoTip_es || g.photoTip_es, photoTip_en: o.photoTip_en || g.photoTip_en,
      coverageNote_es: o.coverageNote_es || null, coverageNote_en: o.coverageNote_en || null,
    };
  });

  const ISSUE_BY_ID = {};
  ISSUES.forEach((i) => (ISSUE_BY_ID[i.id] = i));
  const ROOM_BY_ID = {};
  ROOMS.forEach((r) => (ROOM_BY_ID[r.id] = r));

  // Lightweight keyword matcher for the "not listed" path.
  MU.suggestCategory = function (text) {
    const s = (text || "").toLowerCase();
    const rules = [
      [/agua|leak|filtra|humed|gotea|moho|mold|inund/, "filtraciones"],
      [/grieta|fisura|crack|raja|ara\u00f1/, "aranitas"],
      [/columna|viga|estructur|hundi|plomo|structur/, "estructura"],
      [/puerta|door/, "puertas"],
      [/cerrad|llave|lock|key|manija/, "cerraduras"],
      [/vidrio|ventana|glass|window/, "vidrios"],
      [/piso|baldosa|tile|floor|fragua|grout/, "pisos"],
      [/pintura|paint|pared|wall/, "pintura"],
      [/inodoro|grifo|fauc|toilet|drena|drain|tuber|pipe|plomer|sink|lavaman/, "plomeria"],
      [/toma|breaker|interruptor|luz|light|electr|outlet|switch/, "electrico"],
      [/gabinete|cajon|closet|mesón|meson|counter|cabinet|drawer/, "carpinteria"],
      [/aire|ac\b|hvac|termostato|clima/, "hvac"],
      [/baranda|balcón|balcon|balcony|railing/, "estructura"],
      [/elevador|piscina|portón|porton|pool|elevator|comun|common/, "areascomunes"],
    ];
    for (const [re, cat] of rules) if (re.test(s)) return cat;
    return "general";
  };

  MU.ROOMS = ROOMS;
  MU.ROOM_BY_ID = ROOM_BY_ID;
  MU.ISSUES = ISSUES;
  MU.ISSUE_BY_ID = ISSUE_BY_ID;
})(window.MU);
