// El ping crea en el LS una variable con la alerta.
// Aqui crear un intervalo para buscar en el LS una alerta y mostrarla.
// En el ping si ya existe una alerta en el LS, no volver a agregar la misma alerta.
// La alerta se destruye luego que le llega a todos los usuarios logeados. Podría durar x minutos.

var Alerta = {
    init: function () {
        $('#btnCrearAlerta').off('click').on('click', function (e) {
            e.preventDefault();

            var configAjax = {
                formSelector: '#frmCrearAlerta',
                actionURL: '/' + Admin.dir_cgi_cpn + '/prontus_alert_save.cgi'
            };

            var optsAjax = {
                success: function (json) {
                    if (json.status == '1') {
                        showModalAlert({
                            title: 'Mensaje del servidor',
                            type: 'green',
                            msg: json.msg
                        });

                        $('#modalCrearAlerta').modal('hide');
                    } else {
                        showModalAlert({
                            title: 'Mensaje del servidor',
                            type: 'red',
                            msg: json.msg
                        });
                    }
                }, // success
                complete: function () {
                    /* Cargando... */
                }
            };

            SubmitForm.submitGenericAjax(configAjax, optsAjax);

        });

        setInterval(function () {
            Alerta.handleAlerta();
        }, 5000);
    },
    checkAlerta: function (alerta) {
        var storedAlerta = localStorage.getItem('prontus_alerta');
        var alertaKeys = Object.keys(alerta);

        // Ya hay una alerta guardada.
        if (storedAlerta != null) {
            // Se borro la alerta del ping.
            if (alertaKeys.length == 0) {
                localStorage.removeItem('prontus_alerta');
            } else {
                storedAlerta = JSON.parse(storedAlerta);

                // Es otra alerta, se actualiza.
                if (storedAlerta.id != alerta.id) {
                    localStorage.setItem('prontus_alerta', JSON.stringify(alerta));
                }
            }
        } else {
            if (alertaKeys.length > 0) {
                localStorage.setItem('prontus_alerta', JSON.stringify(alerta));
            }
        }
    },
    prioridades: {
        'alta': { // 5 alertas, cada 5 min.
            maxCounter: 5,
            timeInterval: 300,
            alertColor: 'red'
        },
        'media': { // 2 alertas, cada 5 min.
            maxCounter: 2,
            timeInterval: 300,
            alertColor: 'orange'
        },
        'baja': { // solo 1 alerta.
            maxCounter: 1,
            timeInterval: 0,
            alertColor: 'green'
        }
    },

    handleAlerta: function () {
        var storedAlerta = localStorage.getItem('prontus_alerta');

        // Hay una alerta en el LS.
        if (storedAlerta != null) {
            storedAlerta = JSON.parse(storedAlerta);

            var storedCounter = 1;
            var storedTime = 0;

            if (typeof storedAlerta.counter != 'undefined') {
                storedCounter = storedAlerta.counter;
            }

            if (typeof storedAlerta.time != 'undefined') {
                storedTime = storedAlerta.time;
            }

            if (storedCounter <= Alerta.prioridades[storedAlerta.prioridad].maxCounter) {
                // Ver si ha pasado el tiempo suficiente.
                var timeDiff = Alerta.getCurrentTime() - storedTime;

                // console.log('timeDiff', timeDiff, Alerta.prioridades[storedAlerta.prioridad]);

                if (timeDiff > Alerta.prioridades[storedAlerta.prioridad].timeInterval || storedTime == 0) {
                    storedCounter++;
                    storedTime = Alerta.getCurrentTime();

                    storedAlerta.counter = storedCounter;
                    storedAlerta.time = storedTime;

                    // Escribir en LS.
                    localStorage.setItem('prontus_alerta', JSON.stringify(storedAlerta));

                    showModalAlert({
                        title: storedAlerta.titulo,
                        type: Alerta.prioridades[storedAlerta.prioridad].alertColor,
                        msg: storedAlerta.msg
                    });
                }
            }
        }
    },
    getCurrentTime: function () {
        return parseInt((new Date().getTime()) / 1000);
    }
};

$(document).ready(function () {
    Alerta.init();
});