import Elemento from "../elemento.js";
import { fusionar } from "../../utilidades.js";

export default class Selector extends Elemento {

  constructor({
    elemento = document.querySelector('select'),
    peticion = {},
    configuracion = {}
  } = {}) {

    super({
      elemento: elemento,
      configuracion: fusionar({
        minimumResultsForSearch: aplicacion.configuracion.cantidad_registros_mostrar_busqueda_selector,
        templateResult: (selector, opcion) => {

          if (selector.element && selector.element.nodeName === 'OPTION' && !selector.id)
            selector.text = ' '

          return selector.text

        },
        language: {
          noResults: () => { return '' },
          searching: () => { return 'Buscando...' },
          loadingMore: () => { return 'Cargando más resultados...' },
        }
      }, configuracion)
    });

    this.opcion = {
      valor: elemento.getAttribute('value') ?? elemento.value,
      indice: elemento.selectedIndex + 1 ? elemento.selectedIndex : 0
    }

    this.deshabilitado = elemento.disabled;

    this.peticion = {
      ruta: `${window.aplicacion.enlace}/ejecutar`,
      parametros: (() => {})()
    }

  }

  async inicializar() {}

  async opciones() {

    let peticion = {
      parametros: {
        procedimiento:
          elemento.dataset.peticionProcedimiento ??
          'p_traer_registros_consulta_principal'
      }
    }

    if (elemento.dataset.peticionParametros) {

      this.elemento.dataset.peticionParametros.split(';').forEach(parametro => {

        var [parametro, valor] = parametro.trim().replaceAll('`', "'").split(':');

        valor = valor.trim();

        peticion.parametros[parametro] = valor.startsWith('eval(') ? eval(valor) : valor

      })

    } else {

      peticion.parametros.origen_registros = this.elemento.dataset.peticionTabla;
      peticion.parametros.campos = procedimiento.p_traer_registros_consulta_principal.parametro.campos(
        this.elemento.dataset.peticionTabla,
        this.elemento.name.replace('id_', '')
      )

    }

    this.peticion = fusionar(peticion, this.peticion)

  }

  async destruir() {}

}