/**
 * Normaliza tipos de propiedad de distintos portales a un conjunto canónico.
 * Cada portal usa términos diferentes; esta función los unifica.
 *
 * Tipos canónicos:
 *   piso | ático | chalet | terreno | local | garaje | oficina | trastero | finca | casa
 */

const TYPE_MAP: Array<[RegExp, string]> = [
    // Ático / Penthouse / Dúplex (antes que piso para evitar falsos positivos)
    [/\b(atico|ático|penthouse|duplex|dúplex|triplex)\b/i, "ático"],
    // Piso / Apartamento / Estudio
    [/\b(piso|apartamento|apto|apartment|flat|studio|estudio|loft)\b/i, "piso"],
    // Chalet / Villa / Adosado / Bungalow
    [/\b(chalet|chalé|villa|bungalow|adosad[oa]|unifamiliar|pareado)\b/i, "chalet"],
    // Terreno / Solar / Parcela
    [/\b(terreno|solar|parcela|plot|land|finca rústica|rústica|rustica)\b/i, "terreno"],
    // Local / Nave / Comercial
    [/\b(local|comercial|premises|nave|taller|almacén|almacen)\b/i, "local"],
    // Garaje / Parking
    [/\b(garaje|parking|garage|aparcamiento|plaza de garaje)\b/i, "garaje"],
    // Oficina / Despacho
    [/\b(oficina|office|despacho)\b/i, "oficina"],
    // Trastero
    [/\b(trastero|storage)\b/i, "trastero"],
    // Finca rústica / Cortijo
    [/\b(finca|cortijo|masía|masia|rural|campo|hacienda)\b/i, "finca"],
    // Casa (genérica)
    [/\b(casa|house|vivienda|hogar|home|chalet)\b/i, "casa"],
];

/** Tipos canónicos permitidos en la BD */
export const CANONICAL_TYPES = [
    "piso", "ático", "chalet", "terreno", "local",
    "garaje", "oficina", "trastero", "finca", "casa",
] as const;

export type PropertyType = typeof CANONICAL_TYPES[number];

/**
 * Normaliza un tipo de propiedad a valor canónico.
 * @param raw  Texto libre del portal (título, tipo, categoría)
 * @returns    Tipo canónico; "casa" si no se reconoce
 */
export function normalizePropertyType(raw: string | undefined | null): string {
    if (!raw) return "casa";
    const t = raw.toLowerCase().trim();

    for (const [regex, canonical] of TYPE_MAP) {
        if (regex.test(t)) return canonical;
    }
    return "casa";
}

/**
 * Detecta el tipo de propiedad combinando título y categoría del portal.
 * Útil cuando el portal devuelve categoría separada del título.
 */
export function detectPropertyType(title: string, category?: string): string {
    if (category) {
        const fromCat = normalizePropertyType(category);
        if (fromCat !== "casa") return fromCat; // La categoría tiene prioridad si da resultado
    }
    return normalizePropertyType(title);
}
