use crate::window::create_float_list_window::create_float_list_window_impl;
use crate::window::create_main_window::create_main_window_impl;
use crate::window::create_meeting_window::create_meeting_window_impl;
use crate::window::create_popup_window::create_popup_window_impl;
use crate::window::derive::TargetLocation;
use tauri::{AppHandle, Window};

/// 创建悬浮列表窗口
#[tauri::command]
pub async fn create_float_list_window(app: AppHandle, page_type: &str) -> Result<String, String> {
    create_float_list_window_impl(std::sync::Arc::new(app), page_type).await.map(|_| "success".to_string())
}

/// 创建弹出框窗口
#[tauri::command]
pub async fn create_popup_window(app: AppHandle, window: Window) -> Result<String, String> {
    let current_position_physical = window.outer_position().map_err(|e| format!("获取窗口位置失败: {}", e))?;
    let current_size_physical = window.outer_size().map_err(|e| format!("获取窗口大小失败: {}", e))?;

    // 获取缩放因子
    let scale_factor = window.scale_factor().map_err(|e| format!("获取缩放因子失败: {}", e))?;

    // 转换为逻辑位置和大小
    let current_position = current_position_physical.to_logical::<i32>(scale_factor);
    let current_size = current_size_physical.to_logical::<i32>(scale_factor);
    let target = TargetLocation {
        x: current_position.x,
        y: current_position.y,
        width: current_size.width as u32,
        height: current_size.height as u32,
    };
    create_popup_window_impl(&app, &target, "auto").await.map(|_| "success".to_string())
}

#[tauri::command]
pub async fn create_main_window(app: AppHandle) -> Result<String, String> {
    create_main_window_impl(&app).await.map(|_| "success".to_string())
}

/// 创建会议窗口（Tauri命令）
#[tauri::command]
pub async fn create_meeting_window(app: AppHandle, window_type: u8, course_id: Option<u64>) -> Result<String, String> {
    create_meeting_window_impl(&app, window_type, course_id).await.map(|_| "success".to_string())
}
