mod storage;
mod runner;
mod commands;
mod tray;
mod pin_mode;

use tauri::Manager;
use tauri_plugin_autostart::MacosLauncher;

/// Tauri 应用入口：注册插件、初始化窗口属性、暴露所有 invoke 命令
pub fn run() {
    tauri::Builder::default()
        // 文件读写（用于 JSON 持久化）
        .plugin(tauri_plugin_fs::init())
        // 用系统默认浏览器打开 URL
        .plugin(tauri_plugin_opener::init())
        // 执行系统命令 / 启动应用
        .plugin(tauri_plugin_shell::init())
        // 系统通知（番茄钟提醒）
        .plugin(tauri_plugin_notification::init())
        // 全局快捷键
        .plugin(tauri_plugin_global_shortcut::Builder::new().build())
        // 开机自启
        .plugin(tauri_plugin_autostart::init(
            MacosLauncher::LaunchAgent,
            None,
        ))
        .setup(|app| {
            // 启动后保证数据文件就绪
            if let Err(e) = storage::ensure_data_file(&app.handle()) {
                eprintln!("[DeskFloat] init data file failed: {e:?}");
            }
            // 主窗口在 Windows 上的额外微调：取消阴影、保持半透明
            if let Some(win) = app.get_webview_window("main") {
                let _ = win.set_always_on_top(true);
                let _ = win.set_skip_taskbar(true);
            }
            // 系统托盘：右键「退出」才真正结束进程
            tray::setup_tray(app.handle())?;
            Ok(())
        })
        .on_window_event(|window, event| {
            tray::on_window_event(window, event);
        })
        .invoke_handler(tauri::generate_handler![
            commands::load_state,
            commands::save_state,
            commands::run_shortcut,
            commands::set_always_on_top,
            commands::set_window_size,
            commands::open_data_dir,
            commands::notify_user,
            commands::set_pin_mode,
            commands::update_pin_hotzone,
        ])
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}
