import { WebviewTag } from "electron";

// 菜单项接口
interface MenuItem {
    ShowName: string;
    Url: string;
    Icon: string;
    Children: MenuItem[] | null;
}

// API响应接口
interface ApiResponse<T> {
    status: number;
    code: number;
    msg: string;
    data: T;
}

// 检查登录状态
function checkLoginStatus() {
    const auth = document.cookie.split('; ').find(row => row.startsWith('EACToken=') || row.startsWith('MssSsoToken='));
    if (!auth) {
        window.location.href = 'login.html';
        return;
    }

    // 显示用户信息
    const userInfo = document.getElementById('userInfo');
    if (userInfo) {
        userInfo.textContent = '欢迎使用';
    }
}

// 处理退出登录
function handleLogout() {
    document.cookie = 'expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;';
    window.location.href = 'login.html';
}

// 获取菜单列表
async function getMenuList(): Promise<MenuItem[]> {
    try {
        const response = await fetch('http://1.12.73.211:8848/EIAC_Desktop_Api/api/Menu/GetMenu', {
            method: 'POST'
        });

        const result = await response.json() as ApiResponse<MenuItem[]>;
        if (result.status === 0) {
            return result.data;
        } else {
            throw new Error(result.msg || '获取菜单失败');
        }
    } catch (error) {
        console.error('获取菜单失败:', error);
        throw error;
    }
}

// 创建菜单项
function createMenuItem(item: MenuItem): HTMLLIElement {
    const li = document.createElement('li');
    li.className = 'menu-item';

    const icon = document.createElement('img');
    //icon.src = `./assets/${item.Icon}`;
    icon.src = `./assets/list.png`;
    icon.alt = item.ShowName;
    icon.className = 'menu-icon';

    const span = document.createElement('span');
    span.textContent = item.ShowName;

    li.appendChild(icon);
    li.appendChild(span);

    if (item.Url) {
        li.addEventListener('click', async () => {
            //(document.querySelector("webview") as WebviewElement).src = "https://www.baidu.com";
            //(document.querySelector("webview") as WebviewTag).src = item.Url;

            // 需要明确url是否指定http协议或https协议，如果没有指定，则默认使用http协议。因为没有指定协议会导致webview无法加载。
            const url: string = item.Url.startsWith("http") ? item.Url : `http://${item.Url}`;
            
            /**
             * 无法访问的错误有很多种，但总的来说可以分为两大类：
             * 1. 网络错误：DNS解析错误、连接超时、SSL证书错误等。
             * 2. 服务器错误：服务器拒绝连接、服务器无响应、404、500等。
             */
            const result = await window.electronAPI.checkUrl(url);
            if (result.ok && result.status >= 200 && result.status < 400) {
                console.log('✅ URL 可访问:', result.status);
                (document.querySelector("webview") as WebviewTag).src = url;
            } else {
                console.warn('❌ URL 不可访问:', result.error ?? `status ${result.status}`);
            }
        });
    }

    return li;
}

// 渲染菜单
function renderMenu(menuList: MenuItem[]) {
    const menuContainer = document.getElementById('menuList');
    if (!menuContainer) return;

    menuList.forEach(item => {
        const menuItem = createMenuItem(item);
        menuContainer.appendChild(menuItem);

        if (item.Children) {
            const subMenu = document.createElement('ul');
            subMenu.className = 'submenu';
            item.Children.forEach(child => {
                const childItem = createMenuItem(child);
                subMenu.appendChild(childItem);
            });
            menuContainer.appendChild(subMenu);
        }
    });
}

// 初始化
async function initialize() {
    // 检查登录状态
    checkLoginStatus();

    try {
        const menuList = await getMenuList();
        renderMenu(menuList);

        // 绑定退出登录事件
        const logoutBtn = document.getElementById('btnLogout');
        if (logoutBtn) {
            logoutBtn.addEventListener('click', handleLogout);
        }
    } catch (error) {
        console.error('初始化失败:', error);
    }
}

// 页面加载完成后初始化
document.addEventListener('DOMContentLoaded', initialize);
