import { useMemo } from 'react';
import { Select, type SelectOption } from '@/components/ui/select';

/**
 * Props pour le composant BitrateSelector
 */
export interface BitrateSelectorProps {
  /** Liste des bitrates disponibles en kbps */
  bitrates: number[];
  /** Bitrate actuel en kbps */
  currentBitrate: number;
  /** Callback appelé quand le bitrate change */
  onBitrateChange: (bitrate: number) => void;
  /** Placeholder pour le select */
  placeholder?: string;
  /** Désactiver le select */
  disabled?: boolean;
  /** Classe CSS supplémentaire */
  className?: string;
}

/**
 * Composant pour sélectionner manuellement la qualité de bitrate
 * T0352: Create Bitrate Selection Component
 *
 * @param props - Props du composant
 * @returns Composant de sélection de bitrate
 */
export function BitrateSelector({
  bitrates,
  currentBitrate,
  onBitrateChange,
  placeholder = 'Select quality...',
  disabled = false,
  className,
}: BitrateSelectorProps) {
  // Convertir les bitrates en options pour le Select
  const options: SelectOption[] = useMemo(() => {
    // Trier les bitrates par ordre décroissant (meilleure qualité en premier)
    const sortedBitrates = [...bitrates].sort((a, b) => b - a);

    return sortedBitrates.map((bitrate) => ({
      value: bitrate.toString(),
      label: `${bitrate} kbps`,
    }));
  }, [bitrates]);

  // Gérer le changement de valeur
  const handleChange = (value: string | string[]) => {
    // Le select est en mode single, donc value est une string
    if (typeof value === 'string' && value) {
      const newBitrate = parseInt(value, 10);
      if (!isNaN(newBitrate)) {
        onBitrateChange(newBitrate);
      }
    }
  };

  // Utiliser une chaîne vide ou undefined si currentBitrate est 0 ou invalide
  const selectValue =
    currentBitrate > 0 ? currentBitrate.toString() : undefined;

  return (
    <Select
      options={options}
      value={selectValue}
      onChange={handleChange}
      placeholder={placeholder}
      disabled={disabled}
      className={className}
    />
  );
}
