import * as Summary from "./summary.js";
import { formateaMoneda } from "../utils.js";


$(document).on('change', '#maquetacion', function (e) {

    e.preventDefault();
    if ($('#maquetacion').is(':checked')) {
        $.get("/presupuesto/public/maquetacion/form", function (data) {
            $("#maquetacionModalBody").html(data);
            loadMaquetacionData();
            $("#maquetacionModal").modal("show");
        });
    } else {
        const calcularStr = $('#div-extras').data('language-calcular');
        $('#maquetacion').data('price', calcularStr);
        $('label[for="maquetacion"] .service-price')
            .text(calcularStr);
        $('#maquetacion').prop('checked', false);
    }
});


$(document).on("submit", "#maquetacionForm", function (e) {

    e.preventDefault();

    const $form = $(this);

    $.ajax({
        url: $form.attr("action"),
        type: $form.attr("method"),
        data: $form.serialize(),
        dataType: "json",
        success: function (json) {

            const modalEl = document.getElementById("maquetacionModal");
            const modal = bootstrap.Modal.getInstance(modalEl) || new bootstrap.Modal(modalEl);
            modal.hide();

            const resumenHtml = `
                <div class="text-start">
                <p>${json.language.num_paginas_estimadas || 'Páginas calculadas'}: ${json.numPaginasEstimadas ?? "-"}</p>
                <p>${json.language.precio_por_pagina_estimado || 'Precio por página estimado'}: ${formateaMoneda(json.precioPaginaEstimado) || "-"}</p>
                <hr class="my-2">
                ${json.precio ?
                    `<h3 class="mb-0"><strong>Precio:</strong> ${formateaMoneda(json.precio)}</h3>` : ""}
                </div>
            `;

            Swal.fire({
                title: json.language.presupuesto_maquetacion || 'Presupuesto Maquetación',
                html: resumenHtml,
                icon: 'info',
                showCancelButton: true,
                confirmButtonText: json.language.add_to_presupuesto || 'Añadir al presupuesto',
                cancelButtonText: json.language.cancel || 'Cancelar',
                customClass: {
                    confirmButton: 'btn btn-secondary me-2', // clases para el botón confirmar
                    cancelButton: 'btn btn-light' // clases para cancelar
                },
                buttonsStyling: false,
                reverseButtons: false,
                allowOutsideClick: false
            }).then((result) => {
                if (result.isConfirmed) {
                    $('#maquetacion').prop('checked', true);
                    $('#maquetacion').data('price', json.precio);
                    $('label[for="maquetacion"] .service-price').text(formateaMoneda(json.precio));
                    Summary.updateExtras();

                    // 🔔 Notifica el resultado a PresupuestoCliente
                    $(document).trigger('maquetacion:result', [{
                        num_paginas_estimadas: json.numPaginasEstimadas,
                        precio_pagina_estimado: json.precioPaginaEstimado,
                        precio: json.precio
                    }]);
                } else {
                    // reset UI si cancelan
                    const calcularStr = $('#div-extras').data('language-calcular');
                    $('#maquetacion').prop('checked', false);
                    $('#maquetacion').data('price', calcularStr);
                    $('label[for="maquetacion"] .service-price').text(calcularStr);
                    Summary.updateExtras();
                }
            });
        },
        error: function (xhr, status, error) {
            try {
                const errs = JSON.parse(xhr.responseText); // { numCaracteres: "…" , … }
                // limpia errores previos
                $form.find(".is-invalid").removeClass("is-invalid");
                $form.find(".invalid-feedback").text("");

                // recorre los errores y los muestra
                Object.entries(errs).forEach(([field, msg]) => {
                    const $input = $form.find(`[name="${field}"]`);
                    if ($input.length) {
                        $input.addClass("is-invalid");
                        $input.siblings(".invalid-feedback").text(msg);
                    }
                });
            } catch {
                $("#maquetacionModalBody").html(
                    "<div class='alert alert-danger'>" + xhr.responseText + "</div>"
                );
            }
        }
    });
});


$(document).on('hidden.bs.modal', '#maquetacionModal', function () {

    const calcularStr = $('#div-extras').data('language-calcular');
    $('#maquetacion').data('price', calcularStr);
    $('label[for="maquetacion"] .service-price').text(calcularStr);
    $('#maquetacion').prop('checked', false).trigger('change');

    Summary.updateExtras();
});


$(document).on('change', '.maquetacion-item', () => {

    $(document).on('change', '.maquetacion-item', () => {
        const payload = {
            num_caracteres: parseInt($('#num-caracteres').val()) || 0,
            formato_maquetacion: $('#formato-maquetacion').val() || 'A5',
            cuerpo_texto: $('#cuerpo-texto').val() || 'medium',
            num_columnas: parseInt($('#num-columnas').val()) || 1,
            num_tablas: parseInt($('#num-tablas').val()) || 0,
            num_fotos: parseInt($('#num-fotos').val()) || 0,
            correccion_ortotipografica: $('#correccion-ortotipografica').is(':checked'),
            texto_mecanografiado: $('#texto-mecanografiado').is(':checked'),
            disenio_portada: $('#disenio-portada').is(':checked'),
            epub: $('#epub').is(':checked'),
        };
        $(document).trigger('maquetacion:update', [payload]);
    });

});


function loadMaquetacionData() {

    $(document).one('maquetacion:response', (e, stored) => {
        $('#num-caracteres').val(stored.num_caracteres);
        $('#formato-maquetacion').val(stored.formato_maquetacion);
        $('#cuerpo-texto').val(stored.cuerpo_texto);
        $('#num-columnas').val(stored.num_columnas);
        $('#num-tablas').val(stored.num_tablas);
        $('#num-fotos').val(stored.num_fotos);
        $('#correccion-ortotipografica').prop('checked', stored.correccion_ortotipografica);
        $('#texto-mecanografiado').prop('checked', stored.texto_mecanografiado);
        $('#disenio-portada').prop('checked', stored.disenio_portada);
        $('#epub').prop('checked', stored.epub);

        Summary.updateExtras();
    });

    $(document).trigger('maquetacion:request');
}

