<template>
  <div
    class="full-h is-flex is-justify-content-center is-align-items-center my-5"
  >
    <form class="box">
      <div class="has-text-centered">
        <h2 class="is-size-1">PC Puma</h2>
      </div>

      <b-field label="Usuario" :type="error">
        <b-input v-model="usuario" @keyup.enter.native="login()" />
      </b-field>

      <b-field label="Contraseña" :type="error">
        <b-input
          type="password"
          password-reveal
          v-model="password"
          @keyup.enter.native="login()"
        />
      </b-field>

      <b-field label="Institucion" :type="error">
        <b-select v-model="idInstitucion" expanded>
          <option value="" disabled>Institucion</option>
          <option
            v-for="(ins, i) in instituciones"
            :key="i"
            :value="ins.id_institucion"
          >
            {{ ins.institucion }}
          </option>
        </b-select>
      </b-field>

      <b-field label="Modulo" :type="error">
        <b-select v-model="idModulo" expanded>
          <option value="" disabled>Módulo</option>
          <option v-for="(m, i) in modulos" :key="i" :value="m.id_modulo">
            {{ m.modulo }}
          </option>
        </b-select>
      </b-field>

      <div class="has-text-centered">
        <b-button
          @click="login()"
          type="is-success"
          :disabled="error || !usuario || !password"
        >
          Iniciar Sesión
        </b-button>
      </div>
    </form>
  </div>
</template>

<script>
import axios from 'axios'

export default {
  props: {
    imprimirError: { type: Function, required: true },
    updateIsLoading: { type: Function, required: true },
  },
  data() {
    return {
      error: '',
      usuario: '',
      password: '',
      idModulo: '',
      idInstitucion: '',
      modulos: [],
      instituciones: [],
    }
  },
  methods: {
    login() {
      if (this.usuario && this.password && !this.error && this.idModulo) {
        const data = {
          operador: this.usuario,
          password: this.password,
          id_institucion: this.idInstitucion,
          id_modulo: this.idModulo,
        }

        this.updateIsLoading(true)
        axios
          .post(`${process.env.api}/auth/login-operador`, data)
          .then((res) => {
            const info = JSON.stringify(res.data)
            localStorage.setItem('usuario', info)
            console.log(info)
            this.updateIsLoading(false)
            this.$router.push('/operador/prestamo_devolucion')
            console.log('entramos')
          })
          .catch((err) => {
            this.error = 'is-danger'
            this.updateIsLoading(false)
            this.imprimirError(err.response.data)
          })
      }
    },
    obtenerCatalogoInstitucion() {
      axios
        .get(`${process.env.api}/institucion`)
        .then((res) => {
          this.instituciones = res.data
        })
        .catch((err) => {
          this.imprimirError(err)
        })
    },
    obtenerCatalogoModulo() {
      axios
        .get(
          `${process.env.api}/modulo/modulos?id_institucion=${this.idInstitucion}`
        )
        .then((res) => {
          this.modulos = res.data
        })
        .catch((err) => {
          this.imprimirError(err)
        })
    },
  },
  watch: {
    password() {
      if (this.error) this.error = ''
    },
    usuario() {
      if (this.error) this.error = ''
    },
    idInstitucion() {
      this.obtenerCatalogoModulo()
    },
  },
  created() {
    this.obtenerCatalogoInstitucion()
  },
}
</script>

<style scoped>
.full-h {
  height: 75vh;
}

form {
  width: 30rem;
}
</style>
