use crate::{
    library::{loudnorm::LoudnormAnalysis, track::track_meta::TrackMeta},
    media_container::MediaContainer,
};
use serde::{Deserialize, Serialize};

pub(crate) mod internal;

mod core_impls;
mod database_impls;

pub mod cover_art;
pub mod lyric_data;
pub mod track_meta;

/// Track root. Defines file info, container info, metadata info
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Track {
    pub(crate) container: MediaContainer,
    pub metadata: TrackMeta,
    pub(crate) loudnorm_analysis: Option<LoudnormAnalysis>,
}

impl Track {
    pub const UNKNOWN: &str = "UNKNOWN TITLE";
}
