Skip to content
// Embedded vendor files
pub static TACHYONS_CSS: &[u8] = include_bytes!("../../vendor/tachyons.css");
pub static FIXI_JS: &[u8] = include_bytes!("../../vendor/the-fixi-project@0.1.1.min.js");

// Embedded skill files
pub static FIXI_SKILL: &[u8] = include_bytes!("../../.vibe/skills/fixi/skill.md");
pub static MOXI_SKILL: &[u8] = include_bytes!("../../.vibe/skills/moxi/skill.md");
pub static PAXI_SKILL: &[u8] = include_bytes!("../../.vibe/skills/paxi/skill.md");
pub static SSEXI_SKILL: &[u8] = include_bytes!("../../.vibe/skills/ssexi/skill.md");
pub static REXI_SKILL: &[u8] = include_bytes!("../../.vibe/skills/rexi/skill.md");

/// File information for display
pub struct FileInfo {
    pub name: &'static str,
    pub path: &'static str,
    pub size: usize,
}

/// Format file size in human-readable format
pub fn format_size(bytes: usize) -> String {
    const KB: usize = 1024;
    const MB: usize = KB * 1024;

    if bytes >= MB {
        format!("{:.2} MB", bytes as f64 / MB as f64)
    } else if bytes >= KB {
        format!("{:.2} KB", bytes as f64 / KB as f64)
    } else {
        format!("{} B", bytes)
    }
}

/// All files available for download
pub const ALL_FILES: &[FileInfo] = &[
    FileInfo {
        name: "tachyons.css",
        path: "tachyons.css",
        size: TACHYONS_CSS.len(),
    },
    FileInfo {
        name: "the-fixi-project@0.1.1.min.js",
        path: "the-fixi-project@0.1.1.min.js",
        size: FIXI_JS.len(),
    },
    FileInfo {
        name: "fixi.md",
        path: "fixi.md",
        size: FIXI_SKILL.len(),
    },
    FileInfo {
        name: "moxi.md",
        path: "moxi.md",
        size: MOXI_SKILL.len(),
    },
    FileInfo {
        name: "paxi.md",
        path: "paxi.md",
        size: PAXI_SKILL.len(),
    },
    FileInfo {
        name: "ssexi.md",
        path: "ssexi.md",
        size: SSEXI_SKILL.len(),
    },
    FileInfo {
        name: "rexi.md",
        path: "rexi.md",
        size: REXI_SKILL.len(),
    },
];