use crate::util::variables::MONGO_URI;

use mongodb::{Client, Collection, Database};
use once_cell::sync::OnceCell;

static DBCONN: OnceCell<Client> = OnceCell::new();

pub async fn connect() {
    let client = Client::with_uri_str(&MONGO_URI)
        .await
        .expect("Failed to init db connection.");

    DBCONN.set(client).unwrap();
    migrations::run_migrations().await;
}

pub fn get_connection() -> &'static Client {
    DBCONN.get().unwrap()
}

pub fn get_db() -> Database {
    get_connection().database("revolt")
}

pub fn get_collection(collection: &str) -> Collection {
    get_db().collection(collection)
}

pub mod migrations;

pub mod channel;
pub mod guild;
pub mod message;
pub mod mutual;
pub mod permissions;
pub mod user;

pub use permissions::*;