/* ============================
   UTIL: utilidades generales
   ============================ */
const Utils = {
    formatearNumero(valor) {
        if (valor === null || valor === undefined || isNaN(Number(valor))) return "0.00";
        return Number(valor).toLocaleString("es-PE", {
            minimumFractionDigits: 2,
            maximumFractionDigits: 2
        });
    },

    convertirFecha(fechaISO) {
        if (!fechaISO) return "";
        const partes = fechaISO.split("-");
        if (partes.length !== 3) return fechaISO;
        const [yyyy, mm, dd] = partes;
        return `${dd}/${mm}/${yyyy}`;
    },

    obtenerIpTienda() {
        const val = $("select[name='tienda_ip']").val();
        return val ? val : null;
    },

    htmlMensaje(colspan = 3, msg = "Cargando...", clase = "text-center") {
        return `<tr><td colspan="${colspan}" class="${clase}">${msg}</td></tr>`;
    },

    mostrarLoader() {
        const loader = document.getElementById("loader-overlay");
        if (loader) loader.style.display = "flex";
    },

    ocultarLoader() {
        const loader = document.getElementById("loader-overlay");
        if (loader) loader.style.display = "none";
    }
};


/* ============================
   INIT GENERAL
   ============================ */
$(document).ready(function () {

    const inicioISO = $("#fechaInicio").val();
    const finISO = $("#fechaFin").val();

    if (!inicioISO || !finISO) {
        alert("Seleccione ambas fechas.");
        return;
    }

    Utils.convertirFecha(inicioISO);
    Utils.convertirFecha(finISO);
});


document.addEventListener("DOMContentLoaded", function () {

    const hoy = new Date().toISOString().slice(0, 10);

    if ($("#fechaInicio").length) $("#fechaInicio").val(hoy);
    if ($("#fechaFin").length) $("#fechaFin").val(hoy);

    // ✅ Recuperar tienda desde localStorage (FIX MOBILE / UX PRO)
    const nombreGuardado = localStorage.getItem("tienda_nombre");
    if (nombreGuardado) {
        actualizarNombreUI(nombreGuardado);
    }
});


/* ============================
   ACTUALIZAR UI (DESKTOP + MOBILE)
   ============================ */
function actualizarNombreUI(nombre) {
    document.querySelectorAll(".brand-name, .mobile-title")
        .forEach(el => {
            if (el) el.innerText = nombre;
        });
}


/* ============================
   SESIÓN TIENDA
   ============================ */
function setNombreTienda(selectOrOption) {
    if (!selectOrOption) return;

    const opt = (selectOrOption.tagName &&
        selectOrOption.tagName.toLowerCase() === "select")
        ? selectOrOption.options[selectOrOption.selectedIndex]
        : selectOrOption;

    if (!opt) return;

    const nombre = opt.dataset?.name || "Seleccione una tienda";
    const ip_real = opt.dataset?.ip || "";
    const ip_enc = opt.value || "";

    // input oculto
    const input = document.getElementById("tienda_nombre");
    if (input) input.value = nombre;

    // ✅ actualizar UI inmediatamente
    actualizarNombreUI(nombre);

    // ✅ FIX MOBILE: asegurar render
    setTimeout(() => {
        actualizarNombreUI(nombre);
    }, 50);

    // ✅ guardar en localStorage (persistencia)
    localStorage.setItem("tienda_nombre", nombre);

    // guardar en sesión (backend)
    $.post("../controllers/TiendaController.php", {
        nombre,
        ip_real,
        ip_enc
    }).fail(() => {
        console.warn("No se pudo guardar la tienda en sesión.");
    });
}


/* ============================
   FRASES MOTIVADORAS
   ============================ */
const Frases = {
    async obtenerFrase() {
        try {
            const res = await fetch("https://api.quotable.io/random");
            const data = await res.json();

            const traducido = await fetch(
                `https://api.mymemory.translated.net/get?q=${encodeURIComponent(data.content)}&langpair=en|es`
            );

            const trad = await traducido.json();

            const fraseEl = document.getElementById("frase");
            const autorEl = document.getElementById("autor");

            if (!fraseEl || !autorEl) return;

            fraseEl.textContent = trad.responseData.translatedText;
            autorEl.textContent = "- " + data.author;

        } catch (error) {
            console.error("Error al obtener la frase:", error);
        }
    }
};


/* ============================
   FECHA BOGOTÁ
   ============================ */
function fechaBogota() {
    const ahora = new Date();

    const offsetBogota = -5 * 60;
    const offsetLocal = ahora.getTimezoneOffset();
    const diffMin = offsetBogota - offsetLocal;

    const fecha = new Date(ahora.getTime() + diffMin * 60000);

    const yyyy = fecha.getFullYear();
    const mm = String(fecha.getMonth() + 1).padStart(2, "0");
    const dd = String(fecha.getDate()).padStart(2, "0");

    return `${yyyy}-${mm}-${dd}`;
}


/* ============================
   INIT FORM
   ============================ */
function initform() {
    const inicioISO = $("#fechaInicio").val();
    const finISO = $("#fechaFin").val();

    if (!inicioISO || !finISO) {
        alert("Seleccione ambas fechas.");
        return;
    }

    const ipEnc = Utils.obtenerIpTienda();
    if (!ipEnc) {
        alert("Seleccione una tienda.");
        return;
    }

    const inicio = Utils.convertirFecha(inicioISO);
    const fin = Utils.convertirFecha(finISO);

    return { inicio, fin, ipEnc };
}