use crate::{MediaType, Rating, anime::AnimeType};
use chrono::{DateTime, NaiveDate, Utc};
use serde::Deserialize;
pub const CALENDAR_BASE_URL: &str = "https://data.simkl.in/calendar/";
pub const AIRING_NEXT_TV_URL: &str = "https://data.simkl.in/calendar/tv.json";
pub const AIRING_NEXT_ANIME_URL: &str = "https://data.simkl.in/calendar/anime.json";
pub const AIRING_NEXT_MOVIE_URL: &str = "https://data.simkl.in/calendar/movie_release.json";
#[derive(Default, Debug, Clone, PartialEq, Deserialize)]
pub struct RatingsItem {
pub simkl: Rating,
}
#[derive(Default, Debug, Clone, PartialEq, Deserialize)]
pub struct IdsItem {
pub simkl_id: u32,
pub slug: String,
pub tmdb: u32,
pub imdb: Option<String>,
pub mal: Option<u32>,
}
#[derive(Default, Debug, Clone, PartialEq, Deserialize)]
pub struct EpisodeItem {
pub season: Option<u16>,
pub episode: u16,
pub url: Option<String>,
}
#[derive(Default, Debug, Clone, PartialEq, Deserialize)]
pub struct CalendarItem {
pub title: String,
pub poster: String,
pub date: DateTime<Utc>,
pub release_date: NaiveDate,
pub rank: u32,
pub ratings: RatingsItem,
pub url: String,
pub ids: IdsItem,
pub episode: Option<EpisodeItem>,
pub anime_type: Option<AnimeType>,
}
pub fn get_monthly_request(what: MediaType, year: u16, month: u8) -> String {
let mut result = String::from(CALENDAR_BASE_URL);
result.push_str(&year.to_string());
result.push('/');
result.push_str(&month.to_string());
match what {
MediaType::Show => result.push_str("/tv.json"),
MediaType::Anime => result.push_str("/anime.json"),
MediaType::Movie => result.push_str("/movie_release.json"),
MediaType::Episode => {}
}
result
}