use rocket::{get, http::ContentType, routes, Route, State};
use sqlx::SqlitePool;

use crate::model::planned_event::PlannedEvent;

#[get("/cal")]
async fn cal(db: &State<SqlitePool>) -> (ContentType, String) {
    //TODO: add unit test once proper functionality is there
    (ContentType::Calendar, PlannedEvent::get_ics_feed(db).await)
}

pub fn routes() -> Vec<Route> {
    routes![cal]
}

#[cfg(test)]
mod test {
    use rocket::{http::Status, local::asynchronous::Client};
    use sqlx::SqlitePool;

    use crate::testdb;

    #[sqlx::test]
    fn test_without_login() {
        let db = testdb!();

        let rocket = rocket::build().manage(db.clone());
        let rocket = crate::tera::config(rocket);

        let client = Client::tracked(rocket).await.unwrap();

        let req = client.get("/");
        let response = req.dispatch().await;

        assert_eq!(response.status(), Status::SeeOther);
        assert_eq!(response.headers().get("Location").next(), Some("/auth"));
    }
}
