mod app;
mod whiteboard;
mod websocket;

use warp::Filter;

#[tokio::main]
async fn main() {
    let whiteboard = whiteboard::Whiteboard::new();
    let whiteboard = std::sync::Arc::new(tokio::sync::Mutex::new(whiteboard));

    let websocket_route = warp::path("ws")
        .and(warp::ws())
        .and(warp::any().map(move || whiteboard.clone()))
        .and_then(websocket::ws_handler);

    let static_files = warp::fs::dir("static");
    let index = warp::get().and(warp::path::end()).and(warp::fs::file("static/index.html"));

    let routes = websocket_route
        .or(static_files)
        .or(index);

    println!("Server starting on http://0.0.0.0:7860");
    warp::serve(routes).run(([0, 0, 0, 0], 7860)).await;
}