/**
 * Jellyfin Field Mapping
 *
 * Maps frontend sort option keys to Jellyfin API field names.
 * This provides the single source of truth for how different UI sort options
 * translate to backend database queries.
 */

/**
 * Maps friendly sort names to Jellyfin API field names
 * Used by all library views for consistent sorting
 */
export const SORT_FIELD_MAP = {
  // Default/fallback sorts
  title: "SortName",
  name: "SortName",

  // Audio-specific sorts
  artist: "Artist",
  album: "Album",
  year: "ProductionYear",
  recent: "DatePlayed",
  added: "DateCreated",
  rating: "CommunityRating",
  duration: "RunTimeTicks",

  // Video-specific sorts
  dateAdded: "DateCreated",
  datePlayed: "DatePlayed",
  IMDBRating: "CommunityRating",

  // Video series sorts
  premiered: "PremiereDate",
  episodeCount: "ChildCount",
} as const;

/**
 * Type-safe sort field names
 */
export type SortField = keyof typeof SORT_FIELD_MAP;

/**
 * Get Jellyfin API field name for a frontend sort key
 * @param key Frontend sort key (e.g., "artist")
 * @returns Jellyfin field name (e.g., "Artist")
 */
export function getJellyfinSortField(key: string): string {
  const field = SORT_FIELD_MAP[key as SortField];
  return field || "SortName"; // Fallback to title sort
}

/**
 * Validate sort order string
 * @param order Sort order value
 * @returns Valid sort order for Jellyfin API
 */
export function normalizeSortOrder(order: string | undefined): "Ascending" | "Descending" {
  if (order === "Descending" || order === "desc" || order === "descending") {
    return "Descending";
  }
  return "Ascending";
}

/**
 * Jellyfin ItemType constants for filtering
 * Used in getItems() and search() calls
 */
export const ITEM_TYPES = {
  // Audio types
  AUDIO: "Audio",
  MUSIC_ALBUM: "MusicAlbum",
  MUSIC_ARTIST: "MusicArtist",
  MUSIC_VIDEO: "MusicVideo",

  // Video types
  MOVIE: "Movie",
  SERIES: "Series",
  SEASON: "Season",
  EPISODE: "Episode",

  // Playlist
  PLAYLIST: "Playlist",
} as const;

/**
 * Predefined item type groups for easy filtering
 */
export const ITEM_TYPE_GROUPS = {
  audio: [ITEM_TYPES.AUDIO, ITEM_TYPES.MUSIC_ALBUM, ITEM_TYPES.MUSIC_ARTIST],
  music: [ITEM_TYPES.AUDIO, ITEM_TYPES.MUSIC_ALBUM, ITEM_TYPES.MUSIC_ARTIST],
  video: [ITEM_TYPES.MOVIE, ITEM_TYPES.SERIES, ITEM_TYPES.EPISODE],
  movies: [ITEM_TYPES.MOVIE],
  tvshows: [ITEM_TYPES.SERIES, ITEM_TYPES.SEASON, ITEM_TYPES.EPISODE],
  episodes: [ITEM_TYPES.EPISODE],
} as const;
