// NOTE: Loading mods from paths as `bind_winit` is cdylib which cannot be
// linked as a Rust dependency
#[path = "../src/event.rs"]
mod event;
#[path = "../src/event_loop.rs"]
mod event_loop;
#[path = "../src/util.rs"]
mod util;

use event::WindowEvent;
use event_loop::{
    EventAction, EventActions, InitAction, InitActions, WindowId, event_loop_new, run_app,
};

use crate::{event_loop::init_actions_singleton, util::into_ptr};

fn main() {
    let event_loop = event_loop_new();
    extern "C" fn init() -> *mut InitActions {
        init_actions_singleton(InitAction::CreateWindow)
    }
    extern "C" fn on_window_event(window_id: WindowId, event: &WindowEvent) -> *mut EventActions {
        dbg!(window_id, &event);

        let actions = match event {
            WindowEvent::CloseRequested => vec![EventAction::Exit],
            _ => vec![],
        };

        into_ptr(actions)
    }
    run_app(event_loop, init, on_window_event);
}