import * as Summary from "./summary.js";
import { formateaMoneda, formateaMoneda6Decimales } 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);
            $("#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'}: ${formateaMoneda6Decimales(json.precio_unitario) || "-"}</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();
                }
                else {
                    const calcularStr = $('#div-extras').data('language-calcular');
                    $('#marcapaginas').prop('checked', false);
                    $('#marcapaginas').data('price', calcularStr);
                    $('label[for="marcapaginas"] .service-price').text(calcularStr);
                }
            });
        },
        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('hidden.bs.modal', '#marcapaginasModal', function () {

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



