//#![feature(restricted_std)]

#[repr(C)]
pub struct PrintConsole {}

#[repr(C)]
#[derive(Copy, Clone, Eq, PartialEq)]
pub enum ApmCpuBoostMode {
    Normal = 0,
    FastLoad = 1,
}

extern "C" {
    fn consoleInit(unk: *mut PrintConsole) -> *mut PrintConsole;
    fn consoleUpdate(unk: *mut PrintConsole);

    fn socketInitialize(unk: *const std::ffi::c_void) -> u32;
    fn nxlinkConnectToHost(redir_stdout: bool, redir_stderr: bool) -> i32;

    fn appletSetCpuBoostMode(mode: ApmCpuBoostMode) -> u32;

    static __text_start: u32;
}

fn main() {
    unsafe {
        // if socketInitialize(std::ptr::null()) == 0 {
        //     nxlinkConnectToHost(true, true);
        // }

        // appletSetCpuBoostMode(ApmCpuBoostMode::FastLoad);

        std::env::set_var("RUST_BACKTRACE", "full");

        println!("__text_start = {:#x}", (&__text_start) as *const _ as usize);

        let options = doukutsu_rs::game::LaunchOptions::default();
        let result = doukutsu_rs::game::init(options);

        if let Err(e) = result {
            println!("Initialization error: {}", e);
            loop {
                std::thread::sleep(std::time::Duration::from_millis(100));
            }
        }
    }
}
