/**
 * Parse visit_link value from DB into a clean array of URLs.
 * Handles: PHP array cast JSON strings, plain JSON strings, raw strings with \/ escaping.
 */
export const parseVisitLinks = (raw: unknown): string[] => {
    if (!raw) return [];
    if (Array.isArray(raw)) {
        return raw.filter(
            (l) => l && typeof l === "string" && l.trim().length > 0,
        );
    }
    if (typeof raw !== "string") return [];
    const trimmed = raw.trim();
    try {
        const parsed = JSON.parse(trimmed);
        if (Array.isArray(parsed)) {
            return parsed.filter(
                (l: unknown) =>
                    l &&
                    typeof l === "string" &&
                    (l as string).trim().length > 0,
            );
        }
        if (typeof parsed === "string" && parsed.trim().length > 0) {
            return [parsed];
        }
    } catch {
        // not valid JSON — use raw value, unescape \/ → /
    }
    const unescaped = trimmed.replace(/\\\//g, "/");
    return unescaped.length > 0 ? [unescaped] : [];
};

/**
 * Extract platform name from URL
 * @param url - The URL to extract platform name from
 * @returns Platform name or 'Autre' if unknown
 */
export const extractPlatformFromUrl = (url: string): string => {
    if (!url) return "Autre";

    const urlLower = url.toLowerCase();

    const platformMap: Record<string, string> = {
        "leboncoin.fr": "leboncoin",
        "bienici.com": "Bienici",
        "seloger.com": "SeLoger",
        "bureauxlocaux.com": "BureauxLocaux",
        "orpi.com": "Orpi",
        "cessionpme.com": "CessionPME",
        "etreproprio.com": "EtreProprio",
        "iadfrance.fr": "IAD France",
        "iad-france.fr": "IAD France",
        "paruvendu.fr": "ParuVendu",
        "pap.fr": "PAP",
        "logic-immo.com": "Logic-immo",
        "immonot.com": "Immonot",
        "eraimmobilier.com": "Erafrance",
        "lesiteimmo.com": "LeSiteImmo",
        "properstar.fr": "Properstar",
        "luxuryestate.com": "LuxuryEstate",
        "efficity.com": "effiCity",
        "human-immobilier.fr": "Human Immobilier",
        "proprietes.lefigaro.fr": "Propriétés Figaro",
        "lefigaro.fr": "Le Figaro Immobilier",
        "foncia.com": "Foncia",
        "topannonces.fr": "Top Annonces",
        "immoregion.fr": "ImmoRegion",
        "guy-hoquet.com": "Guy Hoquet",
        "century21.fr": "Century 21",
        "adaptimmobilier.com": "Adapt Immobilier",
        "maisonsetappartements.fr": "Maisons et Appartements",
        "gensdeconfiance.com": "Gens de Confiance",
        "arthurimmo.com": "Arthur Immo",
        "citya.com": "Citya",
        "barnes-international.com": "BARNES",
        "bskimmobilier.com": "BSK Immobilier",
        "bellesdemeures.com": "Belles Demeures",
        "bellespierres.com": "Belles Pierres",
        "coteparticuliers.com": "Côté Particuliers",
        "domimmo.com": "DOMimmo",
        "danielfeau.com": "Daniel Féau",
        "emilegarcin.fr": "Emile Garcin",
        "engelvoelkers.com": "Engel & Völkers",
        "espaces-atypiques.com": "Espaces Atypiques",
        "green-acres.fr": "Green-Acres",
        "kretzrealestate.com": "Kretz",
        "ladresse.com": "L'Adresse",
        "laforet.com": "Laforêt",
        "lesterrains.com": "Les Terrains",
        "lux-residence.com": "Lux Residence",
        "megagence.com": "MegAgence",
        "nestenn.com": "Nestenn",
        "optimhome.com": "Optimhome",
        "ouestfrance-immo.com": "Ouest France",
        "proprietes-privees.com": "Propriétés Privées",
        "residences-immobilier.com": "Résidences Immobilier",
        "surfaceprivee.com": "Surface Privée",
        "vivastreet.com": "Vivastreet",
        "capifrance.fr": "Capifrance",
        "fnaim.fr": "FNAIM",
        "icade-immobilier.com": "Icade",
        "safti.fr": "SAFTI",
        "immobilier.notaires.fr": "Immobilier Notaires",
    };

    for (const [domain, name] of Object.entries(platformMap)) {
        if (urlLower.includes(domain)) {
            return name;
        }
    }

    return "Autre";
};
