export type ContentKind = "live" | "movie" | "series";

export type XtreamCredentials = {
  serverUrl: string;
  username: string;
  password: string;
};

export type XtreamUserInfo = {
  username?: string;
  status?: string;
  auth?: number;
  exp_date?: string | number | null;
  is_trial?: string | number;
  active_cons?: string | number;
  max_connections?: string | number;
  created_at?: string | number | null;
};

export type XtreamServerInfo = {
  url?: string;
  port?: string | number;
  https_port?: string | number;
  server_protocol?: string;
  timezone?: string;
  timestamp_now?: number;
};

export type XtreamAccount = {
  userInfo: XtreamUserInfo;
  serverInfo?: XtreamServerInfo;
};

export type XtreamCategory = {
  category_id: string;
  category_name: string;
  parent_id?: number | string;
};

export type LiveStream = {
  stream_id: number;
  name: string;
  stream_icon?: string;
  category_id?: string | number;
  epg_channel_id?: string | null;
  tv_archive?: number;
  tv_archive_duration?: number;
  added?: string;
  direct_source?: string;
  custom_sid?: string;
};

export type MovieStream = {
  stream_id: number;
  name: string;
  stream_icon?: string;
  category_id?: string | number;
  rating?: string | number;
  rating_5based?: string | number;
  added?: string;
  container_extension?: string;
  direct_source?: string;
  plot?: string;
  year?: string | number;
};

export type MovieInfo = {
  name?: string;
  movie_image?: string;
  cover_big?: string;
  backdrop_path?: string[] | string;
  plot?: string;
  genre?: string;
  cast?: string;
  director?: string;
  release_date?: string;
  releasedate?: string;
  duration?: string;
  duration_secs?: number;
  rating?: string | number;
  rating_5based?: string | number;
  year?: string | number;
  youtube_trailer?: string;
};

export type MovieData = {
  stream_id?: number | string;
  name?: string;
  container_extension?: string;
  added?: string;
  category_id?: string | number;
};

export type MovieDetailsResponse = {
  info?: MovieInfo;
  movie_data?: MovieData;
};

export type SeriesStream = {
  series_id: number;
  name: string;
  cover?: string;
  backdrop_path?: string[] | string;
  category_id?: string | number;
  plot?: string;
  rating?: string | number;
  rating_5based?: string | number;
  year?: string | number;
};

export type SeriesInfo = {
  name?: string;
  cover?: string;
  cover_big?: string;
  backdrop_path?: string[] | string;
  plot?: string;
  genre?: string;
  cast?: string;
  director?: string;
  releaseDate?: string;
  release_date?: string;
  releasedate?: string;
  rating?: string | number;
  rating_5based?: string | number;
  year?: string | number;
};

export type SeriesEpisode = {
  id: string | number;
  episode_num?: number;
  title?: string;
  container_extension?: string;
  info?: {
    movie_image?: string;
    plot?: string;
    duration?: string;
    duration_secs?: number;
    release_date?: string;
    releasedate?: string;
    rating?: number | string;
  };
  direct_source?: string;
};

export type SeriesSeason = {
  season_number?: number | string;
  name?: string;
  episode_count?: number;
  cover?: string;
  air_date?: string;
};

export type SeriesDetailsResponse = {
  info?: SeriesInfo;
  episodes: Record<string, SeriesEpisode[]>;
  seasons?: SeriesSeason[];
};

export type XtreamCatalog = {
  liveCategories: XtreamCategory[];
  movieCategories: XtreamCategory[];
  seriesCategories: XtreamCategory[];
  liveStreams: LiveStream[];
  movies: MovieStream[];
  series: SeriesStream[];
};

export type FavoriteKey = `${ContentKind}:${number}`;

export const emptyCatalog: XtreamCatalog = {
  liveCategories: [],
  movieCategories: [],
  seriesCategories: [],
  liveStreams: [],
  movies: [],
  series: [],
};
