import { createApp, reactive } from 'https://unpkg.com/petite-vue?module'
type Puesto = {
    puesto_id: number,
    nombre: string,
    facultad_id: number,
}

type Carrera = {
    carrera_id: number;
    carrera_nombre: string;
    clave_carrera: string;
}

type Materia = {
    carrera_id: number;
    clave_materia: string;
    materia_id: number;
    materia_nombre: string;
}

type Usuario = {
    usuario_clave: string;
    usuario_id: number;
    usuario_nombre: string;
}

const app = createApp({
    message: null,
    puestos: [] as Puesto[],
    carreras: [] as Carrera[],
    materias: [] as Materia[],
    usuarios: [] as Usuario[],

    async nuevoPuesto(nuevoPuesto: string) {
        try {
            const res = await fetch('action/puesto.php', {
                method: 'POST',
                body: JSON.stringify({
                    puesto_nombre: nuevoPuesto
                })
            })
            const data = await res.json()
            this.puestos.push(data)
            // order by puesto.nombre
            this.puestos.sort((a: Puesto, b: Puesto) => a.nombre.localeCompare(b.nombre))
        } catch (error) {
            alert(`Error: ${error}`)

        }
    },

    to_delete: null as Puesto | null,
    async eliminarPuesto(puesto_id: number) {
        try {
            const res = await fetch('action/puesto.php', {
                method: 'DELETE',
                body: JSON.stringify({
                    puesto_id
                })
            })
            const data = await res.json()
            this.message = data.msg;

            // after 3 seconds, remove the message
            setTimeout(() => {
                this.message = null
            }, 3000)

            this.puestos = this.puestos.filter((p: Puesto) => p.puesto_id !== puesto_id)
            // order by puesto.nombre
            this.puestos.sort((a: Puesto, b: Puesto) => a.nombre.localeCompare(b.nombre))
        } catch (error) {
            alert(`Error: ${error}`)

        }
    },

    async actualizarPuesto(puesto_id: number, materias: Materia[], usuario_id: number | null) {
        try {
            const res = await fetch('action/puesto.php', {
                method: 'PUT',
                body: JSON.stringify({
                    puesto_id,
                    materias: materias.map(m => m.materia_id),
                    usuario_id
                })
            })
            const data = await res.json()
            this.message = data.msg;

            // after 3 seconds, remove the message
            setTimeout(() => {
                this.message = null
            }, 3000)
        } catch (error) {
            alert(`Error: ${error}`)
        }
    },

    async mounted() {
        this.puestos = await fetch('action/puesto.php').then(res => res.json())
        this.carreras = await fetch('action/action_carreras.php').then(res => res.json())
        this.materias = await fetch('action/action_materias.php').then(res => res.json())
        this.usuarios = await fetch('action/usuarios.php').then(res => res.json())
    }
}).mount('#app')