import { useModuleDictionary as v, useModuleSkeleton as k } from "@m4l/core";
import { useState as f, useEffect as w } from "react";
import { getDynamicSortDictionary as M, DICCTIONARY as x } from "../../dictionary.js";
import { useDynamicSortStore as r } from "../../store/useDynamicSortStore.js";
function E() {
  const [o, a] = f(-1), [t, d] = f([]), { getLabel: p } = v(), m = k(), i = r((e) => e.isOpenPopoverMenuFields), u = r((e) => e.availableFields), l = r((e) => e.inputData), S = r((e) => !!e.popoverSortData), {
    closePopoverMenuFields: s,
    hidePopoverSort: F,
    openPopoverMenuFields: c,
    setInputData: D,
    showPopoverSortForAdd: g,
    setElementRef: h
  } = r((e) => e.actions);
  w(() => {
    i ? (d(
      u.filter(
        (e) => (e.label ?? p(e.dictionaryId)).includes(l)
      )
    ), a(-1)) : d([]);
  }, [i, l, u, p]);
  function y(e) {
    s(), g(e);
  }
  function I() {
    i ? s() : c();
  }
  const P = {
    /** Evento de foco del input dentro del popover. */
    onFocus: (e) => {
      c();
    },
    /** Evento de cambio del input dentro del popover. */
    onChange: (e) => {
      D(e.target.value), i || c(), F(!0);
    },
    /** Evento de teclado del input dentro del popover. */
    onKeyDown: (e) => {
      if (e.key === "ArrowDown") {
        let n = -1;
        t.length > 0 && (o < t.length - 1 ? n = o + 1 : n = t.length - 1), a(n);
      }
      if (e.key === "ArrowUp") {
        let n = -1;
        t.length > 0 && o > -1 && (n = o - 1), a(n);
      }
      if (e.key === "Escape" && s(), e.key === "Enter")
        if (o === -1) {
          if (l.trim() === "") {
            s();
            return;
          }
        } else
          y(t[o]);
    }
  };
  return {
    /** Modo skeleton mientras cargan los módulos. */
    isSkeleton: m,
    /** Placeholder del input dentro del popover. */
    inputPlaceHolder: p(M(x.input_placeholder)),
    /** Texto actual del input. */
    inputData: l,
    /** Props de eventos para el input interno del popover. */
    inputHandlersProps: P,
    /** Campos filtrados por el texto del input. */
    sortFields: t,
    /** Índice del campo actualmente seleccionado por teclado. */
    selectedFieldIndex: o,
    /** Setter de la referencia del trigger button (anchorEl del popover). */
    setElementRef: h,
    /** Si el PopoverMenuFields está abierto. */
    isOpenPopoverMenuFields: i,
    /** Si el PopoverSort está abierto. */
    isOpenPopoverSort: S,
    /** Alterna apertura/cierre del PopoverMenuFields al hacer click en el trigger. */
    handleTriggerClick: I
  };
}
export {
  E as default
};
