import { createApp, reactive } from 'https://unpkg.com/petite-vue?module';
const filter = reactive({
    facultad: -1,
    profesor: '',
    porcentaje: 0,
    faltas: 0,
    tipoFaltas: true,
});

const app = createApp({
    filter,
    facultades: [],
    profesores: [],
    faltas: [],
    mensaje: {
        titulo: '',
        texto: '',
    },
    async refresh() {
        if (filter.facultad == -1 || (filter.porcentaje < 10 && filter.faltas < 1)) {
            console.log('Facultad: ', filter.facultad, 'Porcentaje: ', filter.porcentaje, 'Faltas: ', filter.faltas);
            return;
        }
        $('#cargando').modal('show');
        try {

            this.faltas = await fetch(`action/profesor_faltas.php?facultad=${this.filter.facultad}&${this.filter.tipoFaltas ? 'supervisor' : 'profesor'}&${this.filter.faltas > 0 ? 'faltas' : 'porcentaje'}=${this.filter.faltas > 0 ? this.filter.faltas : this.filter.porcentaje}`).then(res => res.json());
            if (this.faltas.error) {
                $('.modal#mensaje').modal('show');
                this.mensaje.titulo = 'Información';
                this.mensaje.texto = this.faltas.error;
            }
        } catch (error) {
            $('.modal#mensaje').modal('show');
            this.mensaje.titulo = 'Error';
            this.mensaje.texto = 'No se pudo cargar los datos';
        }
        finally {
            $('#cargando').modal('hide');
        }
    },

    async toExcel() {
        if (filter.facultad == -1 || filter.porcentaje < 10) {
            return;
        }
        $('#cargando').modal('show');
        try {
            const response = await fetch(`export/faltas_excel.php`, {
                method: 'POST',
                body: JSON.stringify(this.faltas.map(falta => ({
                    'profesor_clave': falta.profesor.profesor_clave,
                    'profesor_correo': falta.profesor.profesor_correo,
                    'profesor_nombre': falta.profesor.profesor_nombre,
                    'faltas': falta.faltas,
                    'porcentaje': `${falta.porcentaje}%`,
                    'total': falta.total,
                }))),
            })

            const blob = await response.blob();
            window.saveAs(blob, `faltas_${this.facultades.find(facultad => facultad.facultad_id == filter.facultad).facultad_nombre}_${new Date().toISOString().slice(0, 10)}.xlsx`);
        } catch (error) {
            $('.modal#mensaje').modal('show');
            this.mensaje.titulo = 'Error';
            this.mensaje.texto = 'No se pudo cargar los datos';
            console.log('Error: ', error);
        }
        finally {
            $('#cargando').modal('hide');
        }
    },
    async mounted() {
        try {
            this.facultades = await fetch('action/action_facultad.php').then(res => res.json());
            this.profesores = await fetch('action/action_profesor.php').then(res => res.json());
        } catch (error) {
            $('.modal#mensaje').modal('show');
            this.mensaje.titulo = 'Error';
            this.mensaje.texto = 'No se pudo cargar los datos';
            console.log('Error: ', error);
        }
    }
}).mount('#app');
