pub const TEXTURES_DIR: &str = "assets/textures";
pub const MESHES_DIR: &str = "assets/meshes";
pub const SHADERS_DIR: &str = "src/shaders";
pub const ASSETS_DIR: &str = "assets";

pub mod textures
{
    use crate::paths::TEXTURES_DIR;

    pub fn snow_depth() -> String
    {
        format!("{}/snow_depth.exr", TEXTURES_DIR)
    }

    pub fn terrain_heightmap() -> String
    {
        format!("{}/terrain_heightmap.exr", TEXTURES_DIR)
    }

    pub fn terrain_flowmap() -> String
    {
        format!("{}/terrain_flowmap.exr", TEXTURES_DIR)
    }

    pub fn blue_noise() -> String
    {
        format!("{}/blue_noise.png", TEXTURES_DIR)
    }

    pub fn dither_octave(octave: u32) -> String
    {
        format!("{}/dither/octave_{}.png", TEXTURES_DIR, octave)
    }
}

pub mod meshes
{
    use crate::paths::MESHES_DIR;

    pub fn terrain() -> String
    {
        format!("{}/terrain.gltf", MESHES_DIR)
    }

    pub fn test_char() -> String
    {
        format!("{}/test_char.gltf", MESHES_DIR)
    }

    pub fn player() -> String
    {
        format!("{}/player_mesh.glb", MESHES_DIR)
    }
}

pub mod dialogs
{
    use crate::paths::ASSETS_DIR;

    pub fn test_char() -> String
    {
        format!("{}/dialogs/test_char.ink.json", ASSETS_DIR)
    }
}

pub mod shaders
{
    use crate::paths::SHADERS_DIR;

    pub fn blit() -> String
    {
        format!("{}/blit.wgsl", SHADERS_DIR)
    }

    pub fn bubble() -> String
    {
        format!("{}/bubble.wgsl", SHADERS_DIR)
    }

    pub fn debug_overlay() -> String
    {
        format!("{}/debug_overlay.wgsl", SHADERS_DIR)
    }

    pub fn snow_deform() -> String
    {
        format!("{}/snow_deform.wgsl", SHADERS_DIR)
    }

    pub const SHADOW_PACKAGE: &str = "package::shadow";
    pub const MAIN_PACKAGE: &str = "package::main";
    pub const SNOW_LIGHT_ACCUMULATION_PACKAGE: &str = "package::snow_light_accumulation";
}
