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

$(document).on('change', '#marcapaginas', function (e) {
    e.preventDefault();
    if ($('#marcapaginas').is(':checked')) {
        $.get("/presupuesto/public/marcapaginas/form", function (data) {
            $("#marcapaginasModalBody").html(data);

            loadMarcapaginasData();

            // init marcapaginas form
            filtrarAcabados();

            $("#marcapaginasModal").modal("show");
        });
    } else {
        const calcularStr = $('#div-extras').data('language-calcular');
        $('#marcapaginas').data('price', calcularStr);
        $('label[for="marcapaginas"] .service-price')
            .text(calcularStr);
        $('#marcapaginas').prop('checked', false);
    }
});

$(document).on("submit", "#marcapaginasForm", 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("marcapaginasModal");
            const modal = bootstrap.Modal.getInstance(modalEl) || new bootstrap.Modal(modalEl);
            modal.hide();


            const resumenHtml = `
        <div class="text-start">
          <p>${json.language.precio_unidad || 'Precio por unidad'}: ${formateaMoneda(json.precio_unitario, 6) || "-"}</p>
          <h3 class="mb-0">${json.language.precio_total || 'Precio total'}: ${formateaMoneda(json.precio_total) || "-"}</h3>
        </div>
      `;

            Swal.fire({
                title: json.language.presupuesto_marcapaginas || 'Presupuesto Marcapáginas',
                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) {
                    $('#marcapaginas').prop('checked', true);
                    $('#marcapaginas').data('price', json.precio_total);
                    $('label[for="marcapaginas"] .service-price').text(formateaMoneda(json.precio_total));
                    Summary.updateExtras();

                    // 🔔 Notifica el resultado a PresupuestoCliente
                    $(document).trigger('marcapaginas:result', [{
                        precio_unitario: json.precio_unitario,
                        precio: json.precio_total
                    }]);
                } else {
                    const calcularStr = $('#div-extras').data('language-calcular');
                    $('#marcapaginas').prop('checked', false);
                    $('#marcapaginas').data('price', calcularStr);
                    $('label[for="marcapaginas"] .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 {
                $("#marcapaginasModalBody").html(
                    "<div class='alert alert-danger'>" + xhr.responseText + "</div>"
                );
            }
        }
    });
});


$(document).on("change", "#caras-impresion", function (e) {
    e.preventDefault();
    filtrarAcabados();
});


$(document).on('hidden.bs.modal', '#marcapaginasModal', function () {
    const calcularStr = $('#div-extras').data('language-calcular');
    $('#marcapaginas').data('price', calcularStr);
    $('label[for="marcapaginas"] .service-price').text(calcularStr);
    $('#marcapaginas').prop('checked', false);
    
    Summary.updateExtras();
});


function filtrarAcabados() {
    const $select = $("#acabado-marcapaginas");
    const caras = $("#caras-impresion").val(); // "una_cara" o "dos_caras"

    $select.find("option")
        .prop("disabled", true)
        .attr("hidden", true);

    if (caras === "una_cara") {
        $select.find("option.marcapaginas-1cara")
            .prop("disabled", false)
            .attr("hidden", false);
    } else {
        $select.find("option.marcapaginas-2caras")
            .prop("disabled", false)
            .attr("hidden", false);
    }

    if ($select.find("option:selected").prop("disabled")) {
        const firstEnabled = $select.find("option:not([disabled]):first").val();
        $select.val(firstEnabled).trigger("change");
    }
}


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

    const payload = {
        marcapaginas_tirada: parseInt($('#marcapaginas-tirada').val()) || 100,
        tamanio_marcapaginas: $('#tamanio-marcapaginas').val() || '_50x140_',
        caras_impresion: $('#caras-impresion').val() || 'una_cara',
        papel_marcapaginas: $('#papel-marcapaginas').val() || 'cartulina_grafica',
        gramaje_marcapaginas: parseInt($('#gramaje-marcapaginas').val()) || 300,
        acabado_marcapaginas: $('#acabado-marcapaginas').val() || 'ninguno',
    };
    $(document).trigger('marcapaginas:update', [payload]);
});



function loadMarcapaginasData() {

    $(document).one('marcapaginas:response', (e, stored) => {
        $('#marcapaginas-tirada').val(stored.marcapaginas_tirada);
        $('#tamanio-marcapaginas').val(stored.tamanio_marcapaginas);
        $('#caras-impresion').val(stored.caras_impresion);
        $('#papel-marcapaginas').val(stored.papel_marcapaginas);
        $('#gramaje-marcapaginas').val(stored.gramaje_marcapaginas);
        $('#acabado-marcapaginas').val(stored.acabado_marcapaginas);
    });

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



