use tauri::{
    menu::{Menu, MenuItem},
    tray::{MouseButton, MouseButtonState, TrayIconBuilder, TrayIconEvent},
    App, Manager,
};

use crate::utils::base::restore_and_focus_window;

pub fn system_tray_menu(app: &mut App) -> Result<(), tauri::Error> {
    let quit = MenuItem::with_id(app, "quit", "Quit", true, None::<&str>)?;

    let system_menu = Menu::with_items(app, &[&quit])?;

    let system_tray = TrayIconBuilder::with_id("tray")
        .menu(&system_menu)
        .show_menu_on_left_click(false)
        .icon(app.default_window_icon().unwrap().clone())
        .build(app)?;

    system_tray.on_tray_icon_event(|tray, event| {
        if let TrayIconEvent::Click {
            button: MouseButton::Left,
            button_state: MouseButtonState::Up,
            ..
        } = event
        {
            if let Some(window) = tray.app_handle().get_webview_window("main") {
                let is_minimized = window.is_minimized().unwrap_or(false);
                let is_visible = window.is_visible().unwrap_or(true);

                if is_minimized || !is_visible {
                    restore_and_focus_window(&tray.app_handle(), "main");
                } else {
                    let _ = window.hide();
                }
            }
        }
    });

    system_tray.on_menu_event(move |app_handle, event| match event.id.as_ref() {
        "quit" => {
            app_handle.exit(0);
        }
        _ => {}
    });
    Ok(())
}