mod config;
mod database;
mod file_access;
mod file_handler;
mod file_tree;
mod markdown_parser;
mod search;

use config::{get_basepath, load_config, set_basepath, Config};
use database::initialize_database;
use file_handler::{load_file, save_file};
use file_tree::dir_tree_html;
use markdown_parser::parse_markdown;
use search::search_files;
use std::env;
use std::sync::Mutex;
use tauri::Manager;
use tauri_plugin_fs::FsExt;
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
    tauri::Builder::default()
        .plugin(tauri_plugin_dialog::init())
        .plugin(tauri_plugin_fs::init())
        .plugin(tauri_plugin_log::Builder::new().build())
        .plugin(tauri_plugin_shell::init())
        .setup(|app| {
            // allowed the given directory
            let scope = app.fs_scope();
            scope.allow_directory(tauri::path::BaseDirectory::Home.variable(), true);
            app.set_theme(Some(tauri::Theme::Dark));

            let config = load_config(None);
            app.manage(Mutex::new(config)); //RWLock

            Ok(())
        })
        .invoke_handler(tauri::generate_handler![
            initialize_database,
            dir_tree_html,
            parse_markdown,
            search_files,
            get_basepath,
            set_basepath,
            load_file,
            save_file
        ])
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}
