import { useEffect, useMemo, useState } from "react";
import { toast } from "react-toastify";
import { URL_API } from "~/constants";

interface ISucursal {
    sucursalID: number;
    estado?: string;
    name: string;
    banner: string;
    url: string;
    region?: string;
    address: string;
    email: string;
    phone: string;
    instagram_url: string;
    website_urls?: { title?: string; url?: string }[];
    facebook_url?: string;
    tiktok_url?: string;
    youtube_url?: string;
    mercadolibre_url?: string;
    x_url?: string;
    map: string;
    whatsapp: string;
}

const mainRed = "#e31e24";

/** Agrupa sucursales por estado (Venezuela). Sin estado → "Sin estado". */
function groupSucursalesByState(sucursales: ISucursal[]): Map<string, ISucursal[]> {
    const map = new Map<string, ISucursal[]>();
    for (const s of sucursales) {
        const state = (s.estado && s.estado.trim()) ? s.estado.trim() : "Sin estado";
        if (!map.has(state)) map.set(state, []);
        map.get(state)!.push(s);
    }
    const sorted = new Map<string, ISucursal[]>();
    const keys = Array.from(map.keys()).sort((a, b) => {
        if (a === "Sin estado") return 1;
        if (b === "Sin estado") return -1;
        return a.localeCompare(b);
    });
    keys.forEach((k) => sorted.set(k, map.get(k)!));
    return sorted;
}

export default function BranchesPage() {
    const [sucursales, setSucursales] = useState<ISucursal[]>([]);
    const [expandedStates, setExpandedStates] = useState<Set<string>>(new Set());
    const [loading, setLoading] = useState<boolean>(true);

    const byState = useMemo(() => groupSucursalesByState(sucursales), [sucursales]);

    useEffect(() => {
        const fetchSucursals = async () => {
            try {
                setLoading(true);
                const response = await fetch(`${URL_API}/sucursal`);
                const data = await response.json();
                setSucursales(Array.isArray(data) ? data : []);
            } catch (error) {
                console.error("Error al obtener las sucursales:", error);
                toast.error("Error al obtener las sucursales");
            } finally {
                setLoading(false);
            }
        };
        fetchSucursals();
    }, []);

    const toggleState = (stateName: string) => {
        setExpandedStates((prev) => {
            const next = new Set(prev);
            if (next.has(stateName)) next.delete(stateName);
            else next.add(stateName);
            return next;
        });
    };

    const handleViewOnMap = (branch: ISucursal) => {
        if (branch.map) {
            const url = branch.map.startsWith("http") ? branch.map : `https://www.google.com/maps?q=${encodeURIComponent(branch.map)}`;
            window.open(url, "_blank");
        } else {
            toast.info("Coordenadas no disponibles para esta sucursal");
        }
    };

    const normalizedWebsiteUrls = (branch: ISucursal): { title: string; url: string }[] => {
        const list = Array.isArray(branch.website_urls) ? branch.website_urls : [];
        const cleaned = list
            .map((v) => ({
                title: String(v?.title || "").trim(),
                url: String(v?.url || "").trim(),
            }))
            .filter((item) => item.url);
        if (cleaned.length > 0) return cleaned;
        return branch.url ? [{ title: "Pagina Web", url: branch.url }] : [];
    };

    const formatWhatsAppNumber = (value: string) => {
        const digits = value.replace(/\D/g, "");
        if (digits.length >= 10) return digits;
        return value;
    };

    const SOCIAL_ICON_SIZE = 18;

    const socialIconMap: Record<string, JSX.Element> = {
        Instagram: (
            <svg width={SOCIAL_ICON_SIZE} height={SOCIAL_ICON_SIZE} viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
                <path d="M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zm0-2.163c-3.259 0-3.667.014-4.947.072-4.358.2-6.78 2.618-6.98 6.98-.059 1.281-.073 1.689-.073 4.948 0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98 1.281.058 1.689.072 4.948.072 3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98-1.281-.059-1.69-.073-4.949-.073zm0 5.838c-3.403 0-6.162 2.759-6.162 6.162s2.759 6.163 6.162 6.163 6.162-2.759 6.162-6.163c0-3.403-2.759-6.162-6.162-6.162zm0 10.162c-2.209 0-4-1.79-4-4 0-2.209 1.791-4 4-4s4 1.791 4 4c0 2.21-1.791 4-4 4zm6.406-11.845c-.796 0-1.441.645-1.441 1.44s.645 1.44 1.441 1.44c.795 0 1.439-.645 1.439-1.44s-.644-1.44-1.439-1.44z" />
            </svg>
        ),
        Facebook: (
            <svg width={SOCIAL_ICON_SIZE} height={SOCIAL_ICON_SIZE} viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
                <path d="M22 12a10 10 0 10-11.563 9.875v-6.989H7.898V12h2.539V9.797c0-2.506 1.493-3.89 3.777-3.89 1.095 0 2.239.195 2.239.195v2.46H15.19c-1.243 0-1.63.771-1.63 1.562V12h2.773l-.443 2.886H13.56v6.989A10.002 10.002 0 0022 12z" />
            </svg>
        ),
        TikTok: (
            <svg width={SOCIAL_ICON_SIZE} height={SOCIAL_ICON_SIZE} viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
                <path d="M16.5 3c.29 1.52 1.08 2.71 2.37 3.59 1.08.74 2.12 1.11 3.13 1.12v3.38c-1.6-.03-3.04-.45-4.31-1.26V16a5.99 5.99 0 11-5.99-5.99c.31 0 .62.02.92.07v3.46a2.64 2.64 0 00-.92-.16 2.63 2.63 0 102.63 2.63V3h3.17z" />
            </svg>
        ),
        YouTube: (
            <svg width={SOCIAL_ICON_SIZE} height={SOCIAL_ICON_SIZE} viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
                <path d="M23.5 6.2a3.04 3.04 0 00-2.14-2.14C19.52 3.5 12 3.5 12 3.5s-7.52 0-9.36.56A3.04 3.04 0 00.5 6.2 31.7 31.7 0 000 12a31.7 31.7 0 00.5 5.8 3.04 3.04 0 002.14 2.14C4.48 20.5 12 20.5 12 20.5s7.52 0 9.36-.56a3.04 3.04 0 002.14-2.14A31.7 31.7 0 0024 12a31.7 31.7 0 00-.5-5.8zM9.6 15.57V8.43L15.85 12 9.6 15.57z" />
            </svg>
        ),
        MercadoLibre: (
            <svg width={SOCIAL_ICON_SIZE} height={SOCIAL_ICON_SIZE} viewBox="0 0 24 24" fill="none" aria-hidden="true">
                <ellipse cx="12" cy="12" rx="10" ry="7" stroke="currentColor" strokeWidth="2" />
                <path d="M7.2 12.2c1-1.6 2.2-2.3 3.4-2.3 1 0 1.6.4 2.4 1.1.8-.7 1.4-1.1 2.4-1.1 1.3 0 2.5.7 3.4 2.3" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round" />
                <path d="M9.2 14.1l1.2 1.1m5.6-1.1l-1.2 1.1" stroke="currentColor" strokeWidth="1.6" strokeLinecap="round" />
            </svg>
        ),
    };

    const renderSocialLink = (label: string, url: string | undefined) => {
        if (!url) return null;
        const icon = socialIconMap[label];
        return (
            <a
                key={`${label}-${url}`}
                href={url}
                target="_blank"
                rel="noopener noreferrer"
                className={icon ? "social-icon-link" : "branch-social-link"}
                title={label}
                aria-label={label}
            >
                {icon ?? label}
            </a>
        );
    };

    if (loading) {
        return (
            <div className="container py-5">
                <div className="text-center">
                    <div className="spinner-border text-primary" role="status">
                        <span className="sr-only">Cargando...</span>
                    </div>
                </div>
            </div>
        );
    }

    return (
        <div className="branches-page" style={{ marginTop: "-20px" }}>
            <div className="container py-4">
                {/* Título con efecto de burbujas */}
                <div className="branches-title text-center mb-5 mt-5">
                    <div className="branches-title__container">
                        <div className="branches-title__text-wrapper">
                            <h1 className="branches-title__text">
                                CONOCE TODAS NUESTRAS <span className="branches-title__highlight">SUCURSALES</span>
                            </h1>
                            <div className="branches-title__bubble branches-title__bubble--1" />
                            <div className="branches-title__bubble branches-title__bubble--2" />
                            <div className="branches-title__bubble branches-title__bubble--3" />
                        </div>
                    </div>
                    <div className="branches-title__underline"></div>
                </div>

                {/* Acordeón por estado de Venezuela; al expandir se muestran las sucursales */}
                <div className="branches-accordion">
                    {Array.from(byState.entries()).map(([estado, list]) => {
                        const isExpanded = expandedStates.has(estado);
                        return (
                            <div key={estado} className="branches-accordion__item">
                                <button
                                    type="button"
                                    className="branches-accordion__header"
                                    onClick={(e) => {
                                        e.preventDefault();
                                        e.stopPropagation();
                                        toggleState(estado);
                                    }}
                                >
                                                                        <span className="branches-accordion__caret">
                                        <svg
                                            width="10"
                                            height="10"
                                            viewBox="0 0 10 10"
                                            fill="none"
                                            xmlns="http://www.w3.org/2000/svg"
                                            className={isExpanded ? "expanded" : ""}
                                        >
                                            <path
                                                d="M3 4L5 6L7 4"
                                                stroke="#b0b0b0"
                                                strokeWidth="1"
                                                strokeLinecap="round"
                                                strokeLinejoin="round"
                                                fill="none"
                                            />
                                        </svg>
                                    </span>
                                    <span className="branches-accordion__region-name">{estado.toUpperCase()}</span>
                                </button>

                                {isExpanded && (
                                    <div className="branches-accordion__content">
                                        {list.map((sucursal) => (
                                            <div key={sucursal.sucursalID} className="branch-card">
                                                <h3 className="branch-card__name">{sucursal.name.toUpperCase()}</h3>
                                                {sucursal.address && (
                                                    <p className="branch-card__address">{sucursal.address.toUpperCase()}</p>
                                                )}

                                                <div className="branch-card__contact">
                                                    {normalizedWebsiteUrls(sucursal).length > 0 && (
                                                        <div className="branch-card__contact-item branch-card__contact-item--urls">
                                                            {normalizedWebsiteUrls(sucursal).map((website, idx) => (
                                                                <a
                                                                    key={`${sucursal.sucursalID}-website-${idx}`}
                                                                    href={website.url}
                                                                    target="_blank"
                                                                    rel="noopener noreferrer"
                                                                    className="branch-social-link"
                                                                    title={website.title || `Pagina web ${idx + 1}`}
                                                                >
                                                                    {website.title || `Web ${idx + 1}`}
                                                                </a>
                                                            ))}
                                                        </div>
                                                    )}
                                                    {sucursal.email && (
                                                        <div className="branch-card__contact-item">
                                                            <a href={`mailto:${sucursal.email}`}>{sucursal.email}</a>
                                                        </div>
                                                    )}
                                                    {/* {sucursal.url && (
                                                        <div className="branch-card__contact-item branch-card__contact-item--url">
                                                            <a
                                                                href={sucursal.url}
                                                                target="_blank"
                                                                rel="noopener noreferrer"
                                                            >
                                                                {sucursal.url}
                                                            </a>
                                                            <span className="external-link-icon" aria-hidden>↗</span>
                                                        </div>
                                                    )} */}
                                                    {(sucursal.phone || sucursal.whatsapp) && (
                                                        <div className="branch-card__contact-item branch-card__contact-item--phones">
                                                            {sucursal.phone && <span>{sucursal.phone}</span>}
                                                            {sucursal.whatsapp && (
                                                                <>
                                                                    {sucursal.phone && " · "}
                                                                    <a
                                                                        href={`https://wa.me/${formatWhatsAppNumber(sucursal.whatsapp)}`}
                                                                        target="_blank"
                                                                        rel="noopener noreferrer"
                                                                        className="whatsapp-icon"
                                                                        title="WhatsApp"
                                                                    >
                                                                        {sucursal.whatsapp}
                                                                        <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" className="whatsapp-icon__svg">
                                                                            <path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.239-.375a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413Z" />
                                                                        </svg>
                                                                    </a>
                                                                </>
                                                            )}
                                                        </div>
                                                    )}
                                                    {(sucursal.instagram_url ||
                                                        sucursal.facebook_url ||
                                                        sucursal.tiktok_url ||
                                                        sucursal.youtube_url ||
                                                        sucursal.mercadolibre_url ||
                                                        sucursal.x_url) && (
                                                        <div className="branch-card__contact-item branch-card__contact-item--socials">
                                                            {renderSocialLink("Instagram", sucursal.instagram_url)}
                                                            {renderSocialLink("Facebook", sucursal.facebook_url)}
                                                            {renderSocialLink("TikTok", sucursal.tiktok_url)}
                                                            {renderSocialLink("YouTube", sucursal.youtube_url)}
                                                            {renderSocialLink("MercadoLibre", sucursal.mercadolibre_url)}
                                                            {renderSocialLink("X", sucursal.x_url)}
                                                        </div>
                                                    )}
                                                </div>

                                                {(sucursal.map && (
                                                    <button
                                                        type="button"
                                                        className="branch-card__map-btn"
                                                        onClick={() => handleViewOnMap(sucursal)}
                                                    >
                                                        Ver en el mapa
                                                    </button>
                                                ))}
                                            </div>
                                        ))}
                                    </div>
                                )}
                            </div>
                        );
                    })}
                </div>

                {sucursales.length === 0 && !loading && (
                    <p className="text-center text-muted py-4">No hay sucursales registradas.</p>
                )}
            </div>

            <style jsx global>{`
                .branches-page {
                    min-height: 70vh;
                    background-color: #fff;
                }

                .branches-title {
                    margin-bottom: 3rem;
                }

                .branches-title__container {
                    width: 100%;
                }

                .branches-title__text-wrapper {
                    position: relative;
                    display: inline-block;
                }

                .branches-title__bubble {
                    position: absolute;
                    width: 6px;
                    height: 6px;
                    border-radius: 50%;
                    background: ${mainRed};
                    pointer-events: none;
                    animation: branches-bubble-rise 4s ease-out infinite;
                }

                .branches-title__bubble--1 {
                    left: 15%;
                    animation-delay: 0s;
                }

                .branches-title__bubble--2 {
                    left: 50%;
                    animation-delay: 1.3s;
                }

                .branches-title__bubble--3 {
                    left: 85%;
                    animation-delay: 2.6s;
                }

                @keyframes branches-bubble-rise {
                    0% {
                        bottom: 0;
                        opacity: 0.45;
                        transform: scale(1);
                    }
                    70% {
                        opacity: 0.15;
                    }
                    100% {
                        bottom: 100%;
                        opacity: 0;
                        transform: scale(0.8);
                    }
                }

                .branches-title__text {
                    font-size: 2.5rem;
                    font-weight: 700;
                    color: #000;
                    text-transform: uppercase;
                    letter-spacing: 2px;
                    margin-bottom: 0.5rem;
                    position: relative;
                    z-index: 1;
                }

                .branches-title__highlight {
                    color: ${mainRed};
                }

                .branches-title__underline {
                    width: 100px;
                    height: 4px;
                    background: ${mainRed};
                    margin: 0rem auto 0;
                }

                .branches-accordion {
                    margin-top: 2rem;
                }

                .branches-accordion__item {
                    border-bottom: 1px solid #e0e0e0;
                }

                .branches-accordion__header {
                    width: 100%;
                    display: flex;
                    align-items: center;
                    padding: 16px 0;
                    background: none;
                    border: none;
                    cursor: pointer;
                    text-align: left;
                    font-size: 1.1rem;
                    font-weight: bold;
                    color: #333;
                }

                .branches-accordion__header:hover {
                    background-color: #f8f9fa;
                }

                .branches-accordion__caret {
                    margin-right: 12px;
                    display: inline-flex;
                    align-items: center;
                    justify-content: center;
                }

                .branches-accordion__caret svg {
                    transition: transform 0.3s ease;
                }

                .branches-accordion__caret svg.expanded {
                    transform: rotate(180deg);
                }

                .branches-accordion__region-name {
                    font-weight: 700;
                    font-size: 1rem;
                    text-transform: uppercase;
                    letter-spacing: 0.5px;
                }

                .branches-accordion__content {
                    padding: 16px 0 0 0;
                }

                .branch-card {
                    background-color: #fff;
                    padding: 24px;
                    margin: 0 0 1px 0;
                    border-radius: 0;
                    border-bottom: 1px solid #e8e8e8;
                }

                .branch-card:last-child {
                    margin-bottom: 0;
                }

                .branch-card__name {
                    font-size: 1.1rem;
                    font-weight: 700;
                    color: #000;
                    margin-bottom: 12px;
                    text-transform: uppercase;
                    letter-spacing: 0.5px;
                }

                .branch-card__address {
                    color: #333;
                    margin-bottom: 14px;
                    line-height: 1.5;
                    font-size: 0.95rem;
                    text-transform: uppercase;
                }

                .branch-card__contact {
                    margin-bottom: 20px;
                }

                .branch-card__contact-item {
                    margin-bottom: 12px;
                    color: #333;
                    display: flex;
                    align-items: center;
                    gap: 8px;
                }

                .branch-card__contact-item strong {
                    font-weight: 600;
                }

                .branch-card__contact-item a {
                    color: #333;
                    text-decoration: none;
                }

                .branch-card__contact-item a:hover {
                    text-decoration: underline;
                }

                .branch-card__contact-item--url {
                    display: flex;
                    align-items: center;
                    flex-wrap: wrap;
                }

                .branch-card__contact-item--url a {
                    margin-right: 6px;
                }

                .branch-card__contact-item--phones {
                    flex-wrap: wrap;
                }

                .branch-card__contact-item--urls,
                .branch-card__contact-item--socials {
                    display: flex;
                    flex-wrap: wrap;
                    gap: 8px;
                }

                .branch-social-link {
                    display: inline-flex;
                    align-items: center;
                    justify-content: center;
                    padding: 4px 10px;
                    border: 1px solid #ddd;
                    border-radius: 14px;
                    font-size: 0.85rem;
                    line-height: 1.2;
                    text-decoration: none;
                    color: #333;
                }

                .branch-social-link:hover {
                    background: #f8f9fa;
                    text-decoration: none;
                }

                .branch-card__contact-item--phones .whatsapp-icon {
                    display: inline-flex;
                    align-items: center;
                    gap: 4px;
                }

                .external-link-icon {
                    color: #333;
                    font-size: 0.85rem;
                    margin-left: 2px;
                    opacity: 0.8;
                }

                .whatsapp-icon,
                .instagram-icon {
                    color: #333;
                    display: inline-flex;
                    align-items: center;
                    transition: opacity 0.3s ease;
                }

                .social-icon-link {
                    display: inline-flex;
                    align-items: center;
                    justify-content: center;
                    color: #333;
                    width: 28px;
                    height: 28px;
                    border: 1px solid #ddd;
                    border-radius: 50%;
                    text-decoration: none;
                    transition: background-color 0.2s ease, opacity 0.2s ease;
                }

                .social-icon-link:hover {
                    background: #f8f9fa;
                    opacity: 0.85;
                    text-decoration: none;
                }

                .whatsapp-icon__svg {
                    margin-left: 4px;
                    flex-shrink: 0;
                }

                .instagram-icon {
                    margin-left: 0;
                }

                .whatsapp-icon:hover,
                .instagram-icon:hover {
                    opacity: 0.7;
                }

                .branch-card__map-btn {
                    border: 1px solid #333;
                    background: #fff;
                    color: #333;
                    padding: 8px 16px;
                    border-radius: 4px;
                    font-weight: 500;
                    cursor: pointer;
                    transition: all 0.3s ease;
                }

                .branch-card__map-btn:hover {
                    background: #f8f9fa;
                }

                @media (max-width: 768px) {
                    .branches-title__text {
                        font-size: 1.8rem;
                    }

                    .branch-card {
                        padding: 16px;
                    }

                    .branch-card__name {
                        font-size: 1.2rem;
                    }

                    .branches-page {
                        min-height: 0;
                    }
                }

                @media (max-width: 576px) {
                    .branches-title__text {
                        font-size: 1.5rem;
                    }
                }
            `}</style>
        </div>
    );
}
