/**
 * Types pour la feature Track List
 */

import type { Track } from '../player/types';

/**
 * Format d'affichage de la liste de pistes
 */
export type TrackListDisplayMode = 'list' | 'grid';

/**
 * Options de tri pour les pistes
 */
export type TrackSortOption =
  | 'title'
  | 'artist'
  | 'album'
  | 'duration'
  | 'date'
  | 'popularity';

/**
 * Ordre de tri
 */
export type SortOrder = 'asc' | 'desc';

/**
 * Options de filtrage pour les pistes
 */
export interface TrackFilterOptions {
  genre?: string;
  artist?: string;
  album?: string;
  year?: number;
  minDuration?: number;
  maxDuration?: number;
}

/**
 * Options de tri pour les pistes
 */
export interface TrackSortOptions {
  field: TrackSortOption;
  order: SortOrder;
}

/**
 * Props de base pour les composants de liste de pistes
 */
export interface TrackListBaseProps {
  tracks: Track[];
  onTrackClick?: (track: Track) => void;
  onTrackPlay?: (track: Track) => void;
  className?: string;
}

/**
 * État de la liste de pistes
 */
export interface TrackListState {
  tracks: Track[];
  filteredTracks: Track[];
  displayMode: TrackListDisplayMode;
  sortOptions: TrackSortOptions;
  filterOptions: TrackFilterOptions;
  isLoading: boolean;
  error: Error | null;
}
