//! General information about the crate and the emulator.

use crate::{
    gen::{COMPILATION_DATE, COMPILATION_TIME, COMPILER, COMPILER_VERSION, NAME, VERSION},
    util::capitalize,
};

#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;

#[cfg_attr(feature = "wasm", wasm_bindgen)]
pub struct Info;

#[cfg_attr(feature = "wasm", wasm_bindgen)]
impl Info {
    /// Obtains the name of the emulator.
    pub fn name() -> String {
        capitalize(NAME)
    }

    /// Obtains the version of the emulator.
    pub fn version() -> String {
        String::from(VERSION)
    }

    /// Obtains the system this emulator is emulating.
    pub fn system() -> String {
        String::from("Game Boy")
    }

    /// Obtains the name of the compiler that has been
    /// used in the compilation of the base Boytacean
    /// library. Can be used for diagnostics.
    pub fn compiler() -> String {
        String::from(COMPILER)
    }

    pub fn compiler_version() -> String {
        String::from(COMPILER_VERSION)
    }

    pub fn compilation_date() -> String {
        String::from(COMPILATION_DATE)
    }

    pub fn compilation_time() -> String {
        String::from(COMPILATION_TIME)
    }
}