function soloNumeros(e) {
    let key = e.keyCode || e.which;
    let char = [8, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57];
    let tecla_especial = (char.includes(key)) ? true : false;
    return tecla_especial;
}

function soloLetras(e) {
    let tecla = e.keyCode || e.which;
    let patron = /[A-Za-z\s]/;
    let te = String.fromCharCode(tecla);

    if (tecla == 8) return true;
    return patron.test(te);
}

function pasteNumber(e) {
    let input = e.target;
    let text = (e.originalEvent || e).clipboardData.getData('text/plain');
    let netxt = text.replace(/[^a-zA-Z0-9 ]/g, '');
    netxt = netxt.replace(/[A-Za-z\s]/g, '');
    let myTimeout = setTimeout(() => {
        input.value = netxt;
        clearTimeout(myTimeout);
    }, 80);
}

// funcion anonima para que no se pueda alterar las variables desde el navegar
(async function () {
    const urlSearchParams = new URLSearchParams(window.location.search);
    const params = Object.fromEntries(urlSearchParams.entries());
    let URLAPI = "https://movistar-integracion-dot-modified-wonder-87620.appspot.com";
    let host = window.location.host;
    let canal = host.replace('www.', '').split('.')[0];
    let fueraDeHorario = '';
    let telefonoCliente, producto, microsegmento, idLanding, landing, padre = '';
    let muestraHorario = FUERA_HORARIO;


    $(document).on('click', '.js-curtain', function (e) {
        e.preventDefault();
        padre = $(this).closest('.id-callback');
        let element = $(this);
        element.addClass('horizTranslate');
        padre.find('.js-check').fadeIn();
        if (element.hasClass('error') || element.hasClass('sendOK')) {
            hideErrorBtn();
        }
        ctrlTextTerm();
    });

    $(document).on('keyup', '.js-keyup-phone', function () {
        padre = $(this).closest('.id-callback');
        if (padre.find(".js-telefono").val().length == 10) {
            padre.find(".js-checkTerminos").prop("checked", true);
            padre.find('.js-button-enviar').prop("disabled", false);
        } else {
            padre.find(".js-checkTerminos").prop("checked", false);
            padre.find('.js-button-enviar').prop("disabled", true);
        }
    });

    $(document).on('click', '.js-button-enviar', function () {
        padre = $(this).closest('.id-callback');
        if (validateFormulario()) {
            disbleButtom();
            let continueRegister = true;
            telefonoCliente = padre.find(".js-telefono").val();
            producto = padre.find('.producto').val();
            microsegmento = padre.find('.microsegmento').val();
            landing = padre.find('.landing').val();
            idLanding = padre.find('.idlanding').val();
            // validHoraProdExcl();

            if (isFueraHorario()) {
                lanzarFueraHorario();
                continueRegister = false;
                tipoLead = "CMB";
            }
            if (continueRegister) {
                tipoLead = "C2C";
                makeLead();
            }
        }
    });

    function validHoraProdExcl() {
        switch (producto.toLowerCase().trim()) {
            case 'renorepo':
            case 'renorepo_medios':
                console.log("Time change renorepo");
                muestraHorario = FUERA_HORARIO_RENOREPO;
                break;

            default:
                muestraHorario = FUERA_HORARIO
                break;
        }
    }

    function ctrlTextTerm() {
        let el = padre.find('.js-ctrl-text');

        if (el.width() >= 500) {
            el.css('font-size', '13px')
        } else if (el.width() <= 230) {
            el.css('font-size', '7.9px')
        } else {
            el.css('font-size', '10px')
        }
    }

    function validateFormulario() {
        let telefono = padre.find('.js-telefono').val();
        let check = padre.find(".js-checkTerminos").prop("checked");

        if (telefono.length === 10 && telefono != "" && telefono.charAt(0) == "3" && check) {
            padre.find(".js-telefono").removeClass('error');
            return true;
        } else {
            padre.find(".js-telefono").addClass('error');
            return false;
        }
    }

    function isFueraHorario() {
        let horariosATC = getDatesMinAndMax();
        let fechaEvalFin = horariosATC.horaFin, fechaEvalIni = horariosATC.horaIni, fechaActual = new Date();

        let strHoraActual = revisarNumeroMenorA10(fechaActual.getHours()) + ':' + revisarNumeroMenorA10(fechaActual.getMinutes());
        let strHoraIni = revisarNumeroMenorA10(fechaEvalIni.getHours()) + ':' + revisarNumeroMenorA10(fechaEvalIni.getMinutes());
        let strHoraFin = revisarNumeroMenorA10(fechaEvalFin.getHours()) + ':' + revisarNumeroMenorA10(fechaEvalFin.getMinutes());

        if (strHoraActual > strHoraIni && strHoraActual < strHoraFin) {//Validación de horas internamente se evaluan los val ASCII de cada una
            return false;
        } else {
            return true;
        }
    }

    function revisarNumeroMenorA10(numero) {
        if (numero < 10) numero = "0" + numero;
        return numero;
    }

    function getDatesMinAndMax() {
        let horarioIni = muestraHorario.split('-')[1].split(':');
        let horarioFin = muestraHorario.split('-')[0].split(':');

        let fechaHoraMin = new Date(), fechaHoraMax = new Date();
        fechaHoraMin.setHours(parseInt(horarioIni[0]));//Se setea hora inicio atc
        fechaHoraMin.setMinutes(parseInt(horarioIni[1]));//Se setea hora inicio atc
        fechaHoraMin.setSeconds(0);//Se setea hora inicio atc
        fechaHoraMax.setHours(parseInt(horarioFin[0]));//Se setea hora fin atc
        fechaHoraMax.setMinutes(parseInt(horarioFin[1]));//Se setea minutos fin atc
        fechaHoraMax.setSeconds(0);//Se setea minutos fin atc

        return { horaIni: fechaHoraMin, horaFin: fechaHoraMax };
    }

    function lanzarFueraHorario() {
        let horarios = muestraHorario.split('-');
        Swal.fire({
            html: '<b>Fuera de horario</b>, por favor agenda una fecha y hora para que uno de nuestros agentes te pueda contactar.<br><small style="color:#00a9e0">Horarios de atención de lunes a domingo entre las 09:00 hrs y las ' + horarios[0] + ' hrs.<small>',
            confirmButtonColor: '#48C400',
            cancelButtonColor: '#50535a',
            confirmButtonText: 'Agendar',
            width: "470px",
            showCloseButton: true,
            allowOutsideClick: false
        }).then((result) => {
            if (result.isConfirmed) {
                initCalendar();
            } else {
                resetDisbleButtom();
            }
        })
    }

    function initCalendar() {
        let horariosATC = getDatesMinAndMax();
        let ahoraMismo = new Date(),
            fechaHoraMin = horariosATC.horaIni,
            fechaHoraMax = horariosATC.horaFin;

        let strHoraActual = revisarNumeroMenorA10(ahoraMismo.getHours()) + ':' + revisarNumeroMenorA10(ahoraMismo.getMinutes());
        let strHoraFin = revisarNumeroMenorA10(fechaHoraMax.getHours()) + ':' + revisarNumeroMenorA10(fechaHoraMax.getMinutes());

        //Validación de horas internamente se evaluan los val ASCII de cada una
        if (strHoraActual >= strHoraFin && strHoraActual <= "23:59") {
            fechaHoraMin.setDate(ahoraMismo.getDate() + 1);//Se suma un día
            fechaHoraMax.setDate(ahoraMismo.getDate() + 1);//Se suma un día
        }
        fechaHoraMax.setHours(fechaHoraMax.getHours() - 1);//Se setea hora fin atc
        fechaHoraMin.setHours(9);
        let enviarCallback = false;

        // se setea el input de calendar con la fecha minima
        let fechaFormatada = new Intl.DateTimeFormat("es-CO", {
            year: "numeric",
            month: "2-digit",
            day: "2-digit",
            hour: "2-digit",
            minute: "2-digit",
            hour12: false
        }).format(fechaHoraMin);
        fechaFormatada = fechaFormatada.replaceAll('/', '-');
        fechaFormatada = fechaFormatada.replaceAll(',', '');
        padre.find(".calendar").val(fechaFormatada);

        Swal.fire({
            title: 'Agenda tu llamada',
            html: '<div id="dtBox"></div>',
            showCloseButton: false,
            allowOutsideClick: false,
            showConfirmButton: false,
        });
        $("#dtBox").DateTimePicker({
            isInline: true,
            titleContentDateTime: "",
            defaultDate: fechaHoraMin,
            minDateTime: fechaHoraMin,
            maxDateTime: fechaHoraMax,
            inputElement: padre.find(".calendar"),
            buttonClicked: function (btn, sElemValue) {
                if (btn == 'SET') {
                    enviarCallback = true;
                    fueraDeHorario = padre.find('.calendar').val();
                }
                if (btn == 'CLEAR') {
                    resetDisbleButtom();
                }
                Swal.close();
            },
            setValueInTextboxOnEveryClick: true,
            settingValueOfElement: function (oDTP, sElemValue, dElemValue, $oElem) {
                if (enviarCallback) makeLead(); //Envía lead a server
                enviarCallback = false; //evita request al server cuando se cambie la hora
            }
        });
        $('.dtpicker-compValue').attr('readonly', 'readonly');
    }

    function makeLead() {
        let rtaDataLayer = 'Llameme-OK';
        const erroDuplicate = [4291, 4292, 4293, 4294, 429];
        $.ajax({
            async: true,
            crossDomain: true,
            type: "POST",
            url: URLAPI + "/api/leads/nuevo",
            headers: {
                "Content-Type": "application/json"
            },
            processData: false,
            data: JSON.stringify(getDataLead()),
            beforeSend: function () {
                padre.removeClass('sendNumber-ok');
                console.log("sending...");
                padre.find('.js-action-load .icon').hide();
                padre.find('.js-action-load span').hide();
                padre.find('.js-check').fadeOut();
                padre.find('.js-curtain').removeClass('horizTranslate');
                padre.find('.js-action-load .icon-spinner').show();
            },
            success: function (response) {
                console.log(response);
                padre.find('.js-action-load .icon-spinner').hide();
                padre.find('#dtBox').fadeOut(100);//caja calendar
                padre.find('#data-cliente').fadeIn(120);//sección callback
                if (response.code == 200) {//registro ok
                    makeFb();
                    showSuccessBtn('Enviado');
                    resetCampsForm();
                    resetDisbleButtom();
                    setTimeout(() => { redirectThankYouPage() }, 1000);
                    if (padre.find(".js-button-enviar").hasClass('send-soicos')) {
                        sendSoicos();
                    }
                } else if (response.code == 201) {//registro ok fuera de horario
                    makeFb();
                    showSuccessBtn('Programado');
                    resetCampsForm();
                    resetDisbleButtom();
                    if (padre.find(".js-button-enviar").hasClass('send-soicos')) {
                        sendSoicos();
                    }
                } else if (erroDuplicate.includes(response.code)) {
                    showDuplicateBtn();
                    resetCampsForm();
                    resetDisbleButtom();
                } else {
                    rtaDataLayer = 'Llameme-KO';
                    showErrorBtn();
                    padre.find('.js-button-enviar').prop("disabled", false);
                }
                padre.find('.js-action-load span').show();
            },
            complete: function () {
                pushDatalayer('trackEvent', 'portal publico ' + landing, 'Lo quiero', rtaDataLayer, landing + " - " + idLanding + " - " + telefonoCliente, telefonoCliente);
                if (rtaDataLayer == 'Llameme-OK') {
                    padre.addClass('sendNumber-ok');
                }
            },
            error: function (jqXHR, textStatus, errorThrown) {
                let code = jqXHR.responseJSON.code || 0;
                rtaDataLayer = 'Llameme-KO';
                padre.find('.js-button-enviar').prop("disabled", false);
                console.log(jqXHR.responseJSON);
                if (erroDuplicate.includes(code)) {
                    showDuplicateBtn();
                    resetCampsForm();
                } else {
                    showErrorBtn();
                }
                resetDisbleButtom();
            }
        });
    }


    function getCookie(cname) {
        let name = cname + "=";
        let ca = document.cookie.split(';');
        for (let i = 0; i < ca.length; i++) {
            let c = ca[i];
            while (c.charAt(0) == ' ') {
                c = c.substring(1);
            }
            if (c.indexOf(name) == 0) {
                return c.substring(name.length, c.length);
            }
        }
        return "";
    }

    function makeFb() {
        let validEvent = getCookie('event_id');
        if (validEvent != "" && validEvent != undefined && validEvent != null) {
            let fb = {
                "ph": telefonoCliente,
                "clientUserAgent": navigator.userAgent,
                "fbp": getCookie('_fbp'),
                "fbc": getCookie('_fbc'),
                "eventId": validEvent,
                "eventSourceUrl": DOMPurify.sanitize(window.location.origin + window.location.pathname),
                "producto": producto
            };
            $.ajax({
                async: false,
                crossDomain: true,
                method: "POST",
                url: "https://movistar-integracion-pixeron-dot-modified-wonder-87620.appspot.com/api/leads/event-facebook",
                headers: {
                    "content-type": "application/json"
                },
                processData: false,
                data: JSON.stringify(fb),
                success: function (data) {
                    res = JSON.stringify(data);
                    response = JSON.parse(res);
                    if (response.code == 200) {
                        console.log("sendData: fb");
                        console.log(response.message);
                    } else if (response.exception == "MissingRequestCookieException") {
                        console.log("Error al capturar cookies");
                        console.log(response.message);
                    } else {
                        console.log(response.response);
                    }
                },
                error: function (jqXHR, textStatus, errorThrown) {
                    console.log("errores pass");
                }
            });
        } else {
            console.log('no-sendData: fb');
        }

    }

    function getDataLead() {
        let data = {
            "telefonoCliente": telefonoCliente,
            "canal": canal,
            "producto": producto,
            "microsegmento": microsegmento,
            "landing": landing,
            "idLanding": idLanding,
            "medio": "web",
            "tipoLead": tipoLead,
            "urlPage": window.location.href,
            "campania": utmsClear(params.campaign),
            "utmSource": utmsClear(params.utm_source),
            "utmCampaing": (params.utm_campaing != '' && params.utm_campaing != undefined) ? utmsClear(params.utm_campaing) : utmsClear(params.utm_campaign),
            "utmMedium": utmsClear(params.utm_medium),
            "utmTerm": utmsClear(params.utm_term),
            "utmContent": utmsClear(params.utm_content),
            "fueraDeHorario": utmsClear(fueraDeHorario)
        };

        console.log(data);
        return data;
    }

    function utmsClear(attr) {
        return (attr == undefined || attr == null || attr == '') ? '' : attr;
    }


    function showSuccessBtn(msj) {
        padre.find('.js-action-load .icon').hide();
        padre.find('.js-action-load .icon-send').show();
        padre.find('.js-action-load span').html(msj);
        padre.find('.js-action-load span').show();
        padre.find('.js-action-load').addClass('sendOK');
        setTimeout(() => {
            hideErrorBtn();
        }, 5000);
    }

    function showDuplicateBtn() {
        padre.find('.js-action-load .icon').hide();
        padre.find('.js-action-load .icon-send').show();
        padre.find('.js-action-load').addClass('duplicate');
        padre.find('.js-action-load span').html('Pronto te llamaremos');
        padre.find('.js-action-load span').show();
        setTimeout(() => {
            hideErrorBtn();
        }, 3000);
    }

    function showErrorBtn() {
        padre.find('.js-action-load i').hide();
        padre.find('.js-action-load').addClass('error');
        padre.find('.js-action-load span').html('X &nbsp;&nbsp;&nbsp;&nbsp;Error');
        padre.find('.js-action-load span').show();
        setTimeout(() => {
            hideErrorBtn();
        }, 3000);
    }

    function hideErrorBtn() {
        padre.find('.js-action-load .icon').hide();
        padre.find('.js-action-load .icon-phone').show();
        padre.find('.js-action-load').removeClass('error');
        padre.find('.js-action-load').removeClass('sendOK');
        padre.find('.js-action-load').removeClass('duplicate');
        let text = padre.find('.js-action-load span').attr('data-texto')
        padre.find('.js-action-load span').html(text);
        padre.find('.js-action-load span').show();
    }

    function resetCampsForm() {
        padre.find('.js-telefono').val('');
        padre.find('.calendar').val('');
        padre.find(".js-checkTerminos").prop("checked", false);
        tipoLead = '';
    }

    function disbleButtom() {
        padre.find('.js-action-load').prop("disabled", true);
        padre.find('.js-button-enviar').prop("disabled", true);
    }

    function resetDisbleButtom() {
        padre.find('.js-action-load').prop("disabled", false);
        padre.find('.js-button-enviar').prop("disabled", false);
    }

    function redirectThankYouPage() {
        const url = window.location;
        if ( url.pathname == "/pospago/portabilidad" || url.pathname == "/pospago") {
            window.location = "/gracias-general-pospago";
        }else if(url.pathname == "/hogar/planes-internet-hogar"){
            window.location = "/gracias-general-fibra";
        }
    }

    function pushDatalayer(event, category, action, label, value, telefonoCliente) {
        // console.log("!!!!!!MAKE PUSH DATALAYER¡¡¡¡¡\nevent: " + event + "\ncategory: " + category + "\naction: " + action + "\nlabel: " + label + "\nvalue: " + value);
        dataLayer.push({
            'event': 'trackEvent',
            'eventCategory': category,
            'eventAction': action,
            'eventLabel': label,
            'eventValue': value,
            'numero': telefonoCliente
        });
    }

    function sendSoicos() {
        let html = '<script id="scriptsoicos" type="text/javascript"  src="https://ad.soicos.com/soicosjs.php?s=.js"></script>';
        html += '<script id="datasoicos" type="text/javascript">';
        html += '(function() { soicos.registerConversion({ pid :13680, data : ' + telefonoCliente + ' });})();';
        html += '</script>';

        document.body.insertAdjacentHTML("beforeend", html);


        setTimeout(() => {
            document.getElementById('scriptsoicos').remove();
            document.getElementById('datasoicos').remove();
        }, 7000);
    }

    //Marcación boton - Conoce más - oferta siempre ganas
    $(".js-SimpreGanas").on("click", function () {
        dataLayer.push({
            event: "trackEvent",
            eventCategory: "movistarco - home – Sliders",
            eventAction: "click – Conoce más",
            eventLabel: "Oferta voladora",
        });
    });


})();

/* Funcion para ocultar calls de:*/
/* const url = window.location;
if (url.pathname == "/hogar/planes-internet-hogar" || url.pathname == "/pospago/portabilidad" || url.pathname == "/pospago" || url.pathname == "/hogar/planes-internet-fibra-optica" || url.pathname == "/oppo") {
    $('.callback-sencillo').hide()
} */