import type { TablePage } from '@/components/DataTable'
import { FilterSelect } from '@/components/FilterSelect'
import { t } from '@/lib/i18n'

interface Props {
  label: string
  param: string
  options: { value: string; label: string }[]
  /**
   * El valor puesto, aparte de la tabla.
   *
   * Los tres filtros de estado del producto no siempre son un filtro declarado
   * de la tabla: alguno lo aplica la vista antes de paginar. Por eso el valor
   * vigente llega por su cuenta y le gana a lo que diga `page.filters`.
   */
  current: string
  page: TablePage<unknown>
  allLabel?: string
}

/**
 * `C-1B-8` · Los filtros de estado del producto, en una sola forma.
 *
 * Son tres —cobertura, lotes, notificaciones— y hoy son tres implementaciones
 * distintas del mismo control: la misma pregunta contestada con tres dibujos,
 * en tres pantallas que se recorren seguido una detrás de otra.
 *
 * No dibuja nada propio: es `FilterSelect` con el valor vigente puesto a mano.
 * Reimplementarlo «porque acá el estado viene de otro lado» es exactamente cómo
 * aparecieron las tres.
 */
export function FilterChips({
  label,
  param,
  options,
  current,
  page,
  allLabel,
}: Props) {
  // El «todos» por omisión se resuelve acá y no en la firma: un valor por
  // omisión en los parámetros se evalúa al llamar, sí, pero dejarlo explícito
  // marca que sale del catálogo y no es una constante del archivo.
  const all = allLabel ?? t('table.all')

  return (
    <FilterSelect
      label={label}
      param={param}
      table={{ ...page, filters: { ...page.filters, [param]: current } }}
      allLabel={all}
      options={options}
    />
  )
}
