<template>
  <div>
    <h3 class="is-size-4 mb-3">Todos los equipos</h3>

    <div class="columns is-multiline mb-5 is-align-items-flex-end">
      <SelectInstitucion
        columnSize="is-3"
        :idInstitucionPadre="idInstitucion"
        @institucion-seleccionada="
          (nuevaInstitucion) => (idInstitucion = nuevaInstitucion)
        "
        v-if="operador.tipoUsuario.id_tipo_usuario === 2"
      />

      <SelectModulo
        columnSize="is-3"
        :deshabilitarOptVacia="false"
        :idInstitucion="
          operador.institucion
            ? operador.institucion.id_institucion
            : idInstitucion
        "
        :idModuloPadre="idModulo"
        @modulo-seleccionado="(nuevoModulo) => (idModulo = nuevoModulo)"
      />

      <SelectTipoCarrito
        columnSize="is-3"
        :deshabilitarOptVacia="false"
        :idTipoCarritoPadre="idTipoCarrito"
        @tipo-carrito-seleccionado="
          (tipoCarritoModulo) => (idTipoCarrito = tipoCarritoModulo)
        "
      />

      <SelectMarca
        columnSize="is-3"
        tipo="e"
        :deshabilitarOptVacia="false"
        :idMarcaPadre="idMarca"
        @marca-seleccionada="(nuevaMarca) => (idMarca = nuevaMarca)"
      />

      <SelectModelo
        columnSize="is-3"
        tipo="e"
        :deshabilitarOptVacia="false"
        :idModeloPadre="idModelo"
        @modelo-seleccionado="(nuevoModelo) => (idModelo = nuevoModelo)"
      />

      <b-field class="column is-3 mb-0 pb-0" label="Carrito">
        <b-input
          icon="cart"
          placeholder="Carrito"
          type="text"
          @keyup.enter.native="obtenerEquipos()"
          v-model="carrito"
          rounded
        />
      </b-field>

      <b-field class="column is-3 mb-0 pb-0" label="Equipo">
        <b-input
          icon="laptop"
          placeholder="Equipo"
          type="text"
          @keyup.enter.native="obtenerEquipos()"
          v-model="equipo"
          rounded
        />
      </b-field>

      <BotonBuscar
        columnSize="is-3"
        :buscar="obtenerEquipos"
        :disabled="false"
      />
    </div>

    <TablaEquipos
      :equipos="equipos"
      :isLoadingTable="isLoadingTable"
      :obtenerEquipos="obtenerEquipos"
      :onPageChange="onPageChange"
      :total="total"
      :page="page"
      columnaActivo
      columnaInstitucion
    />
  </div>
</template>

<script>
import axios from 'axios'
import BotonBuscar from '@/components/botones/BotonBuscar'
import SelectInstitucion from '@/components/selects/SelectInstitucion'
import SelectMarca from '@/components/selects/SelectMarca'
import SelectModelo from '@/components/selects/SelectModelo'
import SelectModulo from '@/components/selects/SelectModulo'
import SelectTipoCarrito from '@/components/selects/SelectTipoCarrito'
import TablaEquipos from '@/components/tablas/TablaEquipos'

export default {
  components: {
    BotonBuscar,
    SelectInstitucion,
    SelectMarca,
    SelectModelo,
    SelectModulo,
    SelectTipoCarrito,
    TablaEquipos,
  },
  props: { operador: { type: Object, required: true } },
  data() {
    return {
      equipos: [],
      isLoadingTable: false,
      idMarca: 0,
      idModelo: 0,
      idModulo: 0,
      idTipoCarrito: 0,
      page: 1,
      total: 0,
      institucion: {},
      lastSearch: {},
      carrito: '',
      equipo: '',
    }
  },
  methods: {
    obtenerEquipos() {
      let data = ''

      this.isLoadingTable = true
      if (
        this.carrito != this.lastSearch.carrito ||
        this.idModulo != this.lastSearch.idModulo ||
        this.idMarca != this.lastSearch.idMarca ||
        this.idModelo != this.lastSearch.idModelo ||
        this.idTipoCarrito != this.lastSearch.idTipoCarrito ||
        (this.operador.tipoUsuario.id_tipo_usuario === 2 &&
          this.idInstitucion != this.lastSearch.idInstitucion) ||
        (this.operador.tipoUsuario.id_tipo_usuario === 3 &&
          this.operador.institucion.id_institucion !=
            this.lastSearch.idInstitucion)
      ) {
        this.page = 1
        this.lastSearch.carrito = this.carrito
        if (this.operador.tipoUsuario.id_tipo_usuario > 2)
          this.lastSearch.idInstitucion =
            this.operador.institucion.id_institucion
        else if (this.idInstitucion)
          this.lastSearch.idInstitucion = this.idInstitucion
        this.lastSearch.idMarca = this.idMarca
        this.lastSearch.idModelo = this.idModelo
        this.lastSearch.idModulo = this.idModulo
        this.lastSearch.idTipoCarrito = this.idTipoCarrito
      }
      if (this.carrito) data += `&carrito=${this.carrito}`
      if (this.equipo) data += `&equipo=${this.equipo}`
      if (this.operador.institucion.id_institucion)
        data += `&id_institucion=${this.operador.institucion.id_institucion}`
      else if (this.idInstitucion)
        data += `&id_institucion=${this.idInstitucion}`
      if (this.idMarca) data += `&id_marca=${this.idMarca}`
      if (this.idModelo) data += `&id_modelo=${this.idModelo}`
      if (this.idModulo) data += `&id_modulo=${this.idModulo}`
      if (this.idTipoCarrito) data += `&id_tipo_carrito=${this.idTipoCarrito}`
      axios
        .get(
          `${process.env.api}/equipo/equipos?pagina=${this.page}${data}`,
          this.$getToken.token()
        )
        .then((res) => {
          this.equipos = res.data[0]
          this.total = res.data[1]
          this.isLoadingTable = false
        })
        .catch((err) => {
          this.isLoadingTable = false
          this.$alertsGenericos.imprimirError(
            this.$buefy,
            this.$router,
            err.response.data
          )
        })
    },
    onPageChange(page) {
      this.page = page
      this.obtenerEquipos()
    },
  },
  created() {
    this.obtenerEquipos()
  },
}
</script>
