import DatosGenerales from './datosGenerales.js';
import DisenioInterior from './disenioInterior.js';
import DisenioCubierta from './disenioCubierta.js';
import Direcciones from './direcciones.js';
import Resumen from './resumen.js';
import Ajax from '../../components/ajax.js';
import { alertWarningMessage } from '../../components/alerts/sweetAlert.js';


import tarjetaTiradasPrecio from './tarjetaTiradasPrecio.js';

class PresupuestoCliente {

    constructor() {

        this.clientePresupuestoWizard = document.querySelector('#wizard-presupuesto-cliente');

        this.validationStepper = new Stepper(this.clientePresupuestoWizard, {
            linear: true
        });

        this.btnNext = $('#btnNext');
        this.btnPrev = $('#btnPrev');
        this.btnPrint = $('#btnPrint');
        this.btnSave = $('#btnSave');
        this.btnDuplicate = $('#cloneForm');
        this.btnConfirm = $('#btnConfirm');
        this.btnUploadFile = $('#btnUploadFile')

        this.c = $("#c");
        this.lc = $("#lc");
        this.lsc = $("#lsc");

        this.rl_interior = $(".rl-interior");
        this.rl_cubierta = $(".rl-cubierta");
        this.rl_sobrecubierta = $(".rl-sobrecubierta");

        this.datosGenerales = new DatosGenerales($("#datos-generales"), this.clientePresupuestoWizard, this.validationStepper);
        this.disenioInterior = new DisenioInterior($("#interior-libro"), this.clientePresupuestoWizard, this.validationStepper, this);
        this.disenioCubierta = new DisenioCubierta($("#cubierta-libro"), this.clientePresupuestoWizard, this.validationStepper, this);
        this.direcciones = new Direcciones($("#direcciones-libro"), this.clientePresupuestoWizard, this.validationStepper);
        this.resumen = new Resumen($("#resumen-libro"), this.datosGenerales, this.disenioInterior, this.disenioCubierta, this.direcciones);

        this.divTiradasPrecios = $(".divTiradasPrecio");

        this.titulosMenu = $(".titulos-menu");

        this.datos = {};
        this.ajax_calcular = new Ajax('/presupuestocliente/calcular',
            this.datos,
            {},
            this.#procesarPresupuesto.bind(this),
            () => { $('#loader').modal('hide'); });

        this.actualizarTiradasEnvio = false;
        this.calcularPresupuesto = false;

        if (!window.location.href.includes("edit")) {
            this.#processResumenLateral();
        }
    }


    init() {

        // Fuerza el foco en el campo de búsqueda de select2
        $(document).on('select2:open', () => {
            document.querySelector('.select2-search__field').focus();
        });

        this.validationStepper._element.addEventListener('shown.bs-stepper', this.stepperHandler.bind(this));

        this.datosGenerales.init();
        this.disenioInterior.init();
        this.disenioCubierta.init();
        this.direcciones.init();

        if (window.location.href.includes("edit")) {
            this.resumen.init(window.location.href.split("/").pop());
        }
        else {
            this.resumen.init();
        }


        if (this.datosGenerales.excluirRotativa.length == 0) {

            this.direcciones.direccionesCliente.setParams({ 'cliente_id': $("#clienteId").val() })
        }


        this.btnNext.on('click', this.#nextStep.bind(this));
        this.btnPrev.on('click', this.#prevtStep.bind(this));
        this.btnSave.on('click', this.#savePresupuesto.bind(this));
        this.btnDuplicate.on('click', this.#clonePresupuesto.bind(this));
        this.btnConfirm.on('click', this.#confirmPresupuesto.bind(this));
        this.btnPrint.on('click', this.#printPresupuesto.bind(this));
        this.btnUploadFile.on('click', () => {
            $('#dropzone-multi').trigger('click');
        })
        this.titulosMenu.on('click', this.#handleTitulosMenu.bind(this));

        if (window.location.href.includes("edit")) {

            setTimeout(() => {
                this.#cargarPresupuesto();
            }, 0);

            const successMessage = sessionStorage.getItem('message');
            if (successMessage) {
                popSuccessAlert(successMessage);
                sessionStorage.removeItem('message');
            }
        }
        else {
            this.calcularPresupuesto = true;
        }


        $(".calcular-presupuesto").on('change', this.checkForm.bind(this));
        $(".calcular-solapas").on('change', this.calcularSolapas.bind(this));
        $(".calcular-lomo").on('change', this.checkLomoInterior.bind(this));
    }


    #processResumenLateral() {

        this.datosGenerales.processMenuLateral();
        this.disenioInterior.processMenuLateral();
        this.disenioCubierta.processMenuLateral();
    }


    #checkTiradas() {

        let tiradas = [parseInt(this.datosGenerales.tirada1.val())];

        if (this.datosGenerales.tirada2.val().length > 0 &&
            Number.isInteger(parseInt(this.datosGenerales.tirada2.val())) &&
            parseInt(this.datosGenerales.tirada2.val()) > 0 &&
            this.datosGenerales.tirada2.val() != "") {

            tiradas.push(parseInt(this.datosGenerales.tirada2.val()));
        }
        if (this.datosGenerales.tirada3.val().length > 0 &&
            Number.isInteger(parseInt(this.datosGenerales.tirada3.val())) &&
            parseInt(this.datosGenerales.tirada3.val()) > 0 &&
            this.datosGenerales.tirada3.val() != "") {

            tiradas.push(parseInt(this.datosGenerales.tirada3.val()));
        }
        if (this.datosGenerales.tirada4.val().length > 0 &&
            Number.isInteger(parseInt(this.datosGenerales.tirada4.val())) &&
            parseInt(this.datosGenerales.tirada4.val()) > 0 &&
            this.datosGenerales.tirada4.val() != "") {

            tiradas.push(parseInt(this.datosGenerales.tirada4.val()));
        }

        const noPOD = (tiradas.some(tirada => parseInt(tirada) > 30));
        const siPOD = (tiradas.some(tirada => parseInt(tirada) <= 30));

        this.datosGenerales.formValidation.validateField('tirada');
        return !(noPOD && siPOD);
    }

    calcularSolapas() {

        /* Solapas Max */
        this.#getDatos(false, true);
        if (Object.values(this.datos).every(this.#isValidDataForm)) {
            new Ajax('/presupuestocliente/calcularsolapas',
                this.datos,
                {},
                (response) => {
                    if (response === null || response === undefined || response === "") {
                        console.error("Error en el calculo máximo de solapas.");
                        return;
                    }
                    this.disenioCubierta.tamanioSolapasCubierta.attr('max', response);
                    this.disenioCubierta.solapasSobrecubierta.attr('max', response);
                    this.disenioCubierta.textoSolapasCubierta.text("Entre 60 y " + response + " mm");
                    this.disenioCubierta.textoSolapasSobrecubierta.text("Entre 60 y " + response + " mm");
                    this.disenioCubierta.textoSolapasFaja.text("Entre 60 y " + response + " mm");
                },
                () => { }
            ).post();
        }
    }

    checkLomoInterior() {

        /* Limites lomo */
        this.#getDatos(false, true);
        if (Object.values(this.datos).every(this.#isValidDataForm)) {
            new Ajax('/presupuestocliente/checklomo',
                this.datos,
                {},
                (response) => {
                    if (response === null || response === undefined || response === "") {
                        console.log("Error en el calculo del lomo interior.");
                        return;
                    }
                    if (response.errors.status == 1) {
                        popErrorAlert('' + response.errors.value, "sk-alert", false);
                    }
                    else {
                        popAlert2Hide('sk-alert');
                    }
                },
                () => { }
            ).post();
        }
    }

    checkForm(event) {

        this.#processResumenLateral();

        if (!this.#checkTiradas()) {
            return;
        }


        if (this.calcularPresupuesto) {

            if (event.target.id === 'divDirecciones') {
                this.actualizarTiradasEnvio = false;

                if (!this.direcciones.calcularPresupuesto) {

                    $('#loader').modal('hide');
                    return;
                }

            }
            else {
                this.actualizarTiradasEnvio = true;
                this.direcciones.divTiradas.empty();
            }

            this.divTiradasPrecios.empty();

            let datos_to_check = this.#prepareData();

            if (Object.values(datos_to_check).every(this.#isValidDataForm)) {

                try {
                    if (!this.datosGenerales.checkPaginasMultiplo4()) {
                        popErrorAlert("Compruebe que todos los campos son correctos.");
                        return;
                    }

                    setTimeout(function () {
                        $('#loader').modal('show');
                    }, 0);



                    // Si se está ejecutando la petición, abortar la petición anterior
                    this.ajax_calcular.abort();

                    this.ajax_calcular.setData(this.datos);
                    this.ajax_calcular.post();
                    this.direcciones.calcularPresupuesto = false;
                }
                catch (e) {
                    console.log(e);
                    $('#loader').modal('hide');
                }

            }
        }
    }


    #handleTitulosMenu(event) {

        $('.titulos-menu').removeClass('crossed');

        const nextElement = $(event.target).attr('data-target')
        const currentElement = $('.dstepper-block.active').attr('id');

        if (currentElement === nextElement) {
            return;
        }

        if (nextElement === 'resumen-libro') {
            $(".rl-item").addClass('d-none');
        }

        if (currentElement !== 'resumen-libro') {
            this.#validateCurrentForm(currentElement, nextElement);
            if (currentElement === 'cubierta-libro' && this.disenioCubierta.acabadoCubierta.getVal() == 0) {
                alertWarningMessage(window.translations.cubiertaSinAcabado, window.translations.cubiertaSinAcabadoText);
            }
            this.#goToForm(nextElement);
        }
        else {
            this.#goToForm(nextElement);
        }
        if (!nextElement.includes('resumen-libro'))
            this.#processResumenLateral();
        else {
            $(".rl-item").addClass('d-none');
        }
    }

    #goToForm(form) {

        switch (form) {
            case '#datos-generales':
                this.validationStepper.to(1);
                break;

            case '#interior-libro':
                this.validationStepper.to(2);
                break;

            case '#cubierta-libro':
                this.validationStepper.to(3);
                break;

            case '#direcciones-libro':
                this.validationStepper.to(4);
                break;

            case '#resumen-libro':
                this.validationStepper.to(5);
                break;

            default:
                break;
        }
    }


    #validateCurrentForm(form, nextForm) {

        switch (form) {
            case 'datos-generales':
                this.datosGenerales.allowNext = false;
                validateForm(this.datosGenerales.formValidation).then((status) => {
                    if (status !== 'Valid') {
                        this.datosGenerales.allowNext = true;
                        return false;
                    }
                    this.#goToForm(nextForm);
                    this.datosGenerales.allowNext = true;
                    return true;
                }).catch(error => {
                    this.datosGenerales.allowNext = true;
                    console.error('Error al validar:', error);
                    return false;
                });
                break;

            case 'interior-libro':
                this.disenioInterior.allowNext = false;
                validateForm(this.disenioInterior.formValidation).then((status) => {
                    if (status !== 'Valid') {
                        this.disenioInterior.allowNext = true;
                        return false;
                    }
                    this.#goToForm(nextForm);
                    this.disenioInterior.allowNext = true;
                    return true;
                }
                ).catch(error => {
                    this.disenioInterior.allowNext = true;
                    console.error('Error al validar:', error);
                    return false;
                });
                break;

            case 'cubierta-libro':
                this.disenioCubierta.allowNext = false;
                validateForm(this.disenioCubierta.formValidation).then((status) => {
                    if (status !== 'Valid') {
                        this.disenioCubierta.allowNext = true;
                        return false;
                    }
                    this.#goToForm(nextForm);
                    this.disenioCubierta.allowNext = true;
                    return true;
                }
                ).catch(error => {
                    this.disenioCubierta.allowNext = true;
                    console.error('Error al validar:', error);
                    return false;
                });
                break;

            case 'direcciones-libro':
                this.direcciones.allowNext = false;
                validateForm(this.direcciones.formValidation).then((status) => {
                    if (status !== 'Valid') {
                        this.direcciones.allowNext = true;
                        return false;
                    }
                    this.#goToForm(nextForm);
                    this.direcciones.allowNext = true;
                    return true;
                }
                ).catch(error => {
                    this.direcciones.allowNext = true;
                    console.error('Error al validar:', error);
                    return false;
                });
                break;

            default:
                return false;
        }
    }


    stepperHandler() {

        const element = $('.fv-plugins-bootstrap5.fv-plugins-framework.active');

        switch (element.attr('id')) {
            case 'datos-generales':
                this.btnPrev.addClass('d-none');
                this.btnNext.removeClass('d-none');
                this.btnSave.addClass('d-none');
                this.btnDuplicate.addClass('d-none');
                this.btnPrint.addClass('d-none');
                this.btnConfirm.addClass('d-none');
                break;

            case 'interior-libro':
            case 'cubierta-libro':
            case 'direcciones-libro':
                this.btnPrev.removeClass('d-none');
                this.btnNext.removeClass('d-none');
                this.btnSave.removeClass('d-none');
                this.btnDuplicate.addClass('d-none');
                this.btnPrint.addClass('d-none');
                this.btnConfirm.addClass('d-none');
                break;

            case 'resumen-libro':
                this.btnPrev.removeClass('d-none');
                this.btnNext.addClass('d-none');
                this.btnDuplicate.removeClass('d-none');
                this.btnSave.removeClass('d-none');
                this.btnPrint.removeClass('d-none');
                this.btnConfirm.removeClass('d-none');
                this.resumen.generate();
                break;

            default:
                break;
        }
    }

    #printPresupuesto() {

        window.open('/printpresupuestos/generar/' + window.location.href.split("/").pop(), '_blank');
    }

    #confirmPresupuesto() {

        let total_unidades = 0;
        if (!this.direcciones.recogidaTaller.is(':checked')) {

            this.direcciones.direcciones.forEach(element => {
                total_unidades += parseInt(element.getUnidades());
            });


            if (total_unidades != parseInt(this.direcciones.getSelectedTirada())) {
                popErrorAlert("No se puede confirmar el presupuesto. La suma de las unidades enviadas no coincide con la tirada seleccionada.");
                return;
            }
        }

        this.#solicitudGuardarPresupuesto(true);
    }

    #clonePresupuesto() {

        const id = window.location.href.split("/").pop();
        new Ajax('/presupuestoadmin/clone',
            {
                tipo: 'duplicar',
                presupuesto_id: id
            },
            {},
            (response) => {
                // check if response object has a property named 'id'
                if (response.id) {

                    const new_location = window.location.href.replace(id, response.id);
                    window.location.href = new_location;
                }
                else {
                    popErrorAlert("No se ha podido duplicar el presupuesto");
                }
            },
            (error) => {
                console.error('Error al duplicar el presupuesto:', error);
            }
        ).post();

    }


    #savePresupuesto() {

        this.#solicitudGuardarPresupuesto(false);
    }


    #solicitudGuardarPresupuesto(confirmar = false) {

        try {
            $('#loader').modal('show');

            if (this.direcciones.tiradaSeleccionada == null || this.direcciones.tiradaSeleccionada == undefined
                || this.direcciones.tiradaSeleccionada == "" || this.direcciones.tiradaSeleccionada == 0) {
                popErrorAlert("Seleccione una tirada en la pestaña direcciones para guardar el presupuesto.");
                $('#loader').modal('hide');
                return;
            }

            this.#getDatos();

            let datos_to_check = this.#prepareData();

            if (!Object.values(datos_to_check).every(this.#isValidDataForm)) {
                popErrorAlert("Por favor, rellene todos los datos del presupuesto antes de guardar.");
                $('#loader').modal('hide');
                return;
            }

            if (!this.datosGenerales.checkPaginasMultiplo4()) {
                popErrorAlert("Compruebe que todos los campos son correctos.");
                $('#loader').modal('hide');
                return;
            }

            this.#getDatos(true);

            if (confirmar) {
                this.datos["confirmar"] = 1;
            }

            if (window.location.href.includes("edit")) {
                this.datos["id"] = window.location.href.split("/").pop();
            }
            new Ajax('/presupuestocliente/guardar',
                this.datos,
                {},
                (response) => {
                    $('#loader').modal('hide');
                    if (this.datos["confirmar"] || window.location.href.includes("add")) {
                        if (response.status) {
                            sessionStorage.setItem('message', response.message);
                            window.location.href = response.url + '/' + response.status;
                        }
                        else {
                            popErrorAlert("Presupuesto no válido, corrija los errores antes de guardar.");
                        }
                    }
                    else {
                        if (response.error) {
                            popErrorAlert("Presupuesto no válido, corrija los errores antes de guardar.");
                        }
                        else
                            popSuccessAlert(response.message);
                    }
                },
                () => { $('#loader').modal('hide'); }
            ).post();

        }
        catch (e) {
            console.log(e);
            $('#loader').modal('hide');
        }
    }


    #procesarPresupuesto(response) {

        $('#loader').modal('hide');

        if (response === null || response === undefined || response === "") {
            popErrorAlert("No se ha podido calcular el presupuesto para los datos proporcionados. Por favor, póngase en contacto con el departamento comercial."
                , "sk-alert-2", false);
            return;
        }
        if (Object.values(response.errors).some((value) => value !== "")) {
            if (response.errors.status == 1) {
                popErrorAlert("No se ha podido calcular el presupuesto para los datos proporcionados. Por favor, póngase en contacto con el departamento comercial."
                    , "sk-alert-2", false);
                return;
            }
        }

        if (response.tiradas && response.tiradas.length) {

            let tiradas = { ...response.tiradas };
            tiradas = Object.keys(tiradas).map((key) => tiradas[key]);
            tiradas.sort((a, b) => a - b);
            this.divTiradasPrecios.empty();

            popAlert2Hide();

            for (let i = 0; i < response.tiradas.length; i++) {
                if (i == 0) {
                    $('#eb').val(response.eb[i]);
                }

                let precio = parseFloat((response.precio_u[i]) * parseInt(response.tiradas[i]));


                new tarjetaTiradasPrecio(
                    this.divTiradasPrecios,
                    ('precio-tiradas-' + response.tiradas[i]),
                    response.tiradas[i],
                    precio,
                    response.precio_u[i],
                    response.coste_envio[i]
                );

                if (this.actualizarTiradasEnvio) {
                    this.direcciones.insertTirada(response.tiradas[i]);
                    if (i == 0) {
                        $('#tiradaEnvios-' + response.tiradas[i]).trigger('click');
                    }
                }

            }

            this.lc.val(parseFloat(response.info.lomo_cubierta).toFixed(2));
            this.lsc.val(parseFloat(response.info.lomo_sobrecubierta).toFixed(2));
            setTimeout(() => {
                $(`#containerTiradasEnvios .tirada-envio input[tirada="${this.direcciones.tiradaSeleccionada}"]`).trigger('click');
            }, 0);
        }
        $('#loader').modal('hide');
        // DEBUG
        //console.log(response);
    }


    #nextStep() {

        switch (this.validationStepper._currentIndex) {
            case 0:
                this.datosGenerales.formValidation.validate();
                break;

            case 1:
                this.disenioInterior.formValidation.validate();
                break;


            case 2:
                if (this.disenioCubierta.acabadoCubierta.getVal() == 0) {
                    alertWarningMessage(window.translations.cubiertaSinAcabado, window.translations.cubiertaSinAcabadoText);
                }
                this.disenioCubierta.formValidation.validate();
                break;

            case 3:
                this.direcciones.formValidation.validate();
                break;

            default:
                break;
        }
        $('html, body').animate({ scrollTop: 0 }, 'slow');
    }


    #prevtStep() {
        if (this.validationStepper._currentIndex >= 1 && this.validationStepper._currentIndex <= 4) {
            if (this.validationStepper._currentIndex == 2) {
                if (this.disenioCubierta.acabadoCubierta.getVal() == 0) {
                    alertWarningMessage(window.translations.cubiertaSinAcabado, window.translations.cubiertaSinAcabadoText);
                }
            }
            this.validationStepper.previous();
        }
        $('html, body').animate({ scrollTop: 0 }, 'slow');
    }


    #prepareData(save = false) {
        this.#getDatos(save);

        let datos_to_check = { ...this.datos };
        if (datos_to_check.direcciones) {
            delete datos_to_check.direcciones;
        }
        if (datos_to_check.posPaginasColor == "" || datos_to_check.posPaginasColor == null) {
            delete datos_to_check.posPaginasColor;
        }
        if (datos_to_check.cubierta.acabado == 0) {
            delete datos_to_check.cubierta.acabado;
        }
        if (datos_to_check.sobrecubierta.acabado == 0) {
            delete datos_to_check.sobrecubierta.acabado;
        }

        return datos_to_check;
    }


    #getDatos(save = false, calcularSolapas = false) {

        this.datos = {

            clienteId: this.datosGenerales.getCliente(),

            tamanio: this.datosGenerales.getDimensionLibro(),
            tirada: this.datosGenerales.getTiradas(),
            paginas: this.datosGenerales.paginas.val(),
            paginasColor: this.datosGenerales.paginasColor.val(),
            pagColorConsecutivas: this.datosGenerales.pagColorConsecutivas.is(':checked') ? 1 : 0,
            papelInteriorDiferente: this.datosGenerales.papelDiferente.is(':checked') ? 1 : 0,
            paginasCuadernillo: this.datosGenerales.paginasCuadernillo.val(),

            tipo: this.datosGenerales.tiposLibro.filter('.selected').attr('id'),

            isColor: this.datosGenerales.getIsColor() ? 1 : 0,
            isHq: this.disenioInterior.getIsHq() ? 1 : 0,

            interior: {
                papelInterior: this.disenioInterior.getPapel(),
                gramajeInterior: this.disenioInterior.getGramaje(),

            },
        }

        if (this.direcciones.getSelectedTirada() != null && this.direcciones.getSelectedTirada() != undefined && this.direcciones.getSelectedTirada() > 0) {
            this.datos.selectedTirada = this.direcciones.getSelectedTirada();
        }

        this.datos.guardas = this.disenioCubierta.getGuardas();

        if (calcularSolapas) {
            return;
        }

        this.datos.posPaginasColor = this.datosGenerales.posPaginasColor.val();

        this.datos.prototipo = this.datosGenerales.prototipo.is(':checked') ? 1 : 0;
        this.datos.ferro = this.datosGenerales.ferro.is(':checked') ? 1 : 0;
        this.datos.ferroDigital = this.datosGenerales.ferroDigital.is(':checked') ? 1 : 0;
        this.datos.marcapaginas = this.datosGenerales.marcapaginas.is(':checked') ? 1 : 0;
        this.datos.retractilado = this.datosGenerales.retractilado.is(':checked') ? 1 : 0;
        this.datos.retractilado5 = this.datosGenerales.retractilado5.is(':checked') ? 1 : 0;

        this.datos.eb = $('#eb').val();

        this.datos.cubierta = {
            tipoCubierta: this.disenioCubierta.disenioCubierta.filter('.selected').attr('id'),
            papelCubierta: this.disenioCubierta.getPapel(),
            gramajeCubierta: this.disenioCubierta.getGramaje(),
            cabezada: this.disenioCubierta.getCabezada(),
            acabado: this.disenioCubierta.getAcabados(),
            carasImpresion: this.disenioCubierta.carasCubierta.val(),
        };


        this.datos.sobrecubierta = this.disenioCubierta.getSobrecubierta();
        this.datos.faja = this.disenioCubierta.getFaja();

        this.datos.excluirRotativa = this.datosGenerales.excluirRotativa.is(':checked') ? 1 : 0;
        this.datos.ivaReducido = this.datosGenerales.ivaReducido.find('option:selected').val();
        this.datos.servicios = {
            //'prototipo': this.datosGenerales.prototipo.is(':checked') ? 1 : 0,
            //'ferro': this.datosGenerales.ferro.is(':checked') ? 1 : 0,
            //'ferroDigital': this.datosGenerales.ferroDigital.is(':checked') ? 1 : 0,
            'marcapaginas': this.datosGenerales.marcapaginas.is(':checked') ? 1 : 0,
            'retractilado': this.datosGenerales.retractilado.is(':checked') ? 1 : 0,
            'retractilado5': this.datosGenerales.retractilado5.is(':checked') ? 1 : 0,
            'serviciosExtra': this.datosGenerales.getServiciosExtra(),
        };

        let lomoRedondo = 0;
        if (this.disenioCubierta.disenioCubierta.filter('.selected').length > 0)
            lomoRedondo = this.disenioCubierta.disenioCubierta.filter('.selected').attr('id').includes('Redondo') ? 1 : 0;
        this.datos.cubierta.lomoRedondo = lomoRedondo;

        if (this.datos.tipo == "cosido") {
            this.datos.paginasCuadernillo = this.datosGenerales.paginasCuadernillo.val();
        }
        let solapasCubierta = this.disenioCubierta.getSolapasCubierta();
        if (solapasCubierta !== null && solapasCubierta !== undefined) {

            if (solapasCubierta === false)
                this.datos.cubierta.solapas = 0;
            else {
                this.datos.cubierta.solapas = 1;
                this.datos.cubierta.tamanioSolapas = solapasCubierta;
            }
        }
        else {
            this.datos.cubierta.solapas = 0;
        }

        this.datos.entrega_taller = this.direcciones.recogidaTaller.is(':checked') ? 1 : 0;

        if (!this.direcciones.recogidaTaller.is(':checked')) {
            if (this.direcciones.direcciones.length > 0) {
                this.datos.direcciones = [];
                for (let i = 0; i < this.direcciones.direcciones.length; i++) {
                    this.datos.direcciones.push(this.direcciones.direcciones[i].getFormData());
                };
            }
        }
        if (save) {
            this.datos.datosCabecera = {
                titulo: this.datosGenerales.titulo.val(),
                autor: this.datosGenerales.autor.val(),
                isbn: this.datosGenerales.isbn.val(),
                coleccion: this.datosGenerales.coleccion.val(),
                referenciaCliente: this.datosGenerales.referenciaCliente.val(),
            }
            this.datos.selectedTirada = this.direcciones.getSelectedTirada();
        }

        if (window.location.href.includes("edit")) {
            this.datos["id"] = window.location.href.split("/").pop();
        }
    }


    #cargarPresupuesto() {

        const self = this;

        $('#loader').modal('show');
        let id = window.location.href.split("/").pop()
        new Ajax('/presupuestocliente/cargar/' + id,
            {},
            {},
            (response) => {

                if (response.status === 1) {

                    self.lc.val(parseFloat(response.data.lc).toFixed(2));
                    self.lsc.val(parseFloat(response.data.lsc).toFixed(2));

                    self.calcularPresupuesto = false;

                    self.datosGenerales.cargarDatos(response.data.datosGenerales);
                    self.direcciones.handleChangeCliente();

                    self.direcciones.cargarDatos(response.data.direcciones, response.data.datosGenerales);

                    try {
                        self.disenioInterior.cargarDatos(response.data.interior, response.data.datosGenerales.papelInteriorDiferente);
                    }
                    catch (e) {
                        console.log("Error al cargar diseño interior: " + e);
                    }
                    try {
                        self.disenioCubierta.cargarDatos(response.data.cubierta, response.data.guardas, response.data.sobrecubierta, response.data.faja);
                    }
                    catch (e) {
                        console.log("Error al cargar diseño cubierta: " + e);
                    }


                    setTimeout(() => {

                        $('#loader').modal('hide');

                        if (response.data.state != 2) {

                            self.calcularPresupuesto = true;
                            self.checkForm({ target: { id: 'tirada' } });
                        }
                        else {
                            self.disenioInterior.presupuestoConfirmado = true;
                            if (response.data.interior.negro) {
                                self.disenioInterior.papelNegroForResumen = response.data.interior.negro.papel.nombre;
                                self.disenioInterior.gramajeNegroForResumen = response.data.interior.negro.gramaje;
                            }
                            if (response.data.interior.color) {
                                self.disenioInterior.papelColorForResumen = response.data.interior.color.nombre;
                                self.disenioInterior.gramajeColorForResumen = response.data.interior.color.gramaje;
                            }

                            self.disenioCubierta.presupuestoConfirmado = true;
                            self.disenioCubierta.papelForResumen = response.data.cubierta.papel.nombre;
                            self.disenioCubierta.gramajeForResumen = response.data.cubierta.gramaje;

                            $('#menu_resumen_button').trigger('click');
                            setTimeout(() => {
                                self.resumen.init_dropzone();
                                self.resumen.generate_total(response.data.resumen.base, 
                                    response.data.resumen.precio_unidad, 
                                    response.data.resumen.total_envio,
                                    response.data.datosGenerales.ivaReducido);
                            }, 0);
                        }
                    }, 0);
                }
            },
            () => {
                $('#loader').modal('hide');
                this.calcularPresupuesto = true;
            }
        ).get();
    }


    #isValidDataForm(value) {
        if (value === null || value === undefined || value === '') {
            return false;
        }
        if (typeof value === 'object' && value !== null) {
            const isValidData = Object.values(value).every(isValid);
            return isValidData;
        }
        return true;
    }
}




async function validateForm(formValidation) {
    try {
        const validationResult = await formValidation.validate();
        return validationResult;
    } catch (error) {
        console.error('Error durante la validación:', error);
        throw error;
    }
}


function isValid(value) {
    if (value === null || value === undefined || value === '') {
        return false;
    }
    if (typeof value === 'object' && value !== null) {
        return Object.values(value).every(isValid);
    }
    return true;
}


function initialize(translations) {

    window.translations = JSON.parse(translations);

    let presupuestoCliente = new PresupuestoCliente();
    presupuestoCliente.init();
}

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

    function moveStepperHeader() {
        if ($(window).width() < 768) { // Dispositivos pequeños (menos de 768px)
            if (!$('.bs-stepper-header').parent().hasClass('offcanvas-body')) {
                $('.bs-stepper-header').appendTo('.offcanvas-body');
            }
        } else { // Dispositivos medianos y grandes (768px o más)
            if ($('.bs-stepper-header').parent().hasClass('offcanvas-body')) {
                $('.bs-stepper-header').insertBefore('.offcanvas-body');
            }
        }
    }

    // Ejecutar la función al cargar la página
    moveStepperHeader();

    // Ejecutar la función al cambiar el tamaño de la ventana
    window.addEventListener('resize', function () {
        moveStepperHeader();
    });

    function moveStepperHeader() {
        if ($(window).width() < 768) { // Dispositivos pequeños (menos de 768px)
            if (!$('.bs-stepper-header').parent().hasClass('offcanvas-body')) {
                $('.bs-stepper-header').appendTo('.offcanvas-body');
            }
        } else { // Dispositivos medianos y grandes (768px o más)
            if ($('.bs-stepper-header').parent().hasClass('offcanvas-body')) {
                $('.bs-stepper-header').insertAfter('#menu-offcanvas');
            }
        }
    }

    const dropdown = document.querySelector(".dropdown-language");
    const activeItem = dropdown.querySelector(".dropdown-menu .dropdown-item");
    let locale = 'es';
    if (activeItem) {
        locale = activeItem.getAttribute("data-language");
    }

    new Ajax('/translate/getTranslation', { locale: locale, translationFile: 'Presupuestos' }, {},
        initialize,
        function (error) {
            console.log("Error getting translations:", error);
        }
    ).post();

});


