use super::HtmlTemplate;
use crate::{
    library::Item,
    routes::{
        stream::stream_uri,
        ui::{error::MyResult, node::rocket_uri_macro_r_item_assets},
    },
    AppState,
};
use jellycommon::SourceTrackKind;
use log::warn;
use rocket::{get, uri, FromForm, State};
use std::{path::PathBuf, sync::Arc};
pub fn player_uri(path: &PathBuf) -> String {
    format!("/player/{}", path.to_str().unwrap())
}
#[derive(FromForm, Default, Clone, Debug)]
pub struct PlayerConfig {
    pub a: Option,
    pub v: Option,
    pub s: Option,
    pub webm: bool,
}
#[get("/player/?", rank = 4)]
pub fn r_player(
    state: &State,
    path: PathBuf,
    conf: PlayerConfig,
) -> MyResult>> {
    warn!("{conf:?}");
    let item = state.library.nested_path(&path)?.get_item()?;
    if conf.a.is_none() && conf.v.is_none() && conf.s.is_none() {
        return player_conf(item.clone());
    }
    let tracks = conf
        .a
        .into_iter()
        .chain(conf.v.into_iter())
        .chain(conf.s.into_iter())
        .collect::>();
    Ok(HtmlTemplate(
        "Configure Player".to_string(),
        markup::new! {
            video[src=stream_uri(&item.lib_path, &tracks), controls];
        },
    ))
}
pub fn player_conf<'a>(item: Arc- ) -> MyResult>> {
    let mut audio_tracks = vec![];
    let mut video_tracks = vec![];
    let mut sub_tracks = vec![];
    for (tid, track) in item.info.tracks.clone() {
        match &track.kind {
            SourceTrackKind::Audio { .. } => audio_tracks.push((tid, track)),
            SourceTrackKind::Video { .. } => video_tracks.push((tid, track)),
            SourceTrackKind::Subtitles { .. } => sub_tracks.push((tid, track)),
        }
    }
    Ok(HtmlTemplate(
        "Configure Player".to_string(),
        markup::new! {
            // img.backdrop[src=uri!(r_item_assets(&item.lib_path)).to_string()];
            form.playerconf[method = "GET", action = ""] {
                h2 { "Select tracks for " @item.info.title }
                fieldset.video {
                    legend { "Video" }
                    @for (i, (tid, track)) in video_tracks.iter().enumerate() {
                        input[type="radio", id=tid, name="v", value=tid, checked=i==0];
                        label[for=tid] { @format!("{track}") } br;
                    }
                    input[type="radio", id="v-none", name="v", value=""];
                    label[for="v-none"] { "No video" }
                }
                fieldset.audio {
                    legend { "Audio" }
                    @for (i, (tid, track)) in audio_tracks.iter().enumerate() {
                        input[type="radio", id=tid, name="a", value=tid, checked=i==0];
                        label[for=tid] { @format!("{track}") } br;
                    }
                    input[type="radio", id="a-none", name="a", value=""];
                    label[for="a-none"] { "No audio" }
                }
                fieldset.subtitles {
                    legend { "Subtitles" }
                    @for (i, (tid, track)) in sub_tracks.iter().enumerate() {
                        input[type="radio", id=tid, name="s", value=tid, checked=i==0];
                        label[for=tid] { @format!("{track}") } br;
                    }
                    input[type="radio", id="s-none", name="s", value=""];
                    label[for="s-none"] { "No subtitles" }
                }
                input[type="submit", value="Start playback"];
            }
        },
    ))
}