import { WebviewTag } from "electron";

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

// 图标配置
interface IconConfig {
    _1x: {
        Default: string;
        Selected: string;
    };
    _2x: {
        Default: string;
        Selected: string;
    };
}

// 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, menuList: MenuItem[]): HTMLLIElement {
    const li = document.createElement('li');
    li.className = 'menu-item';

    const icon = document.createElement('img');
    icon.src = item.IconConfig._1x.Default;
    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.querySelectorAll('.menu-item').forEach(menuItem => {
                menuItem.classList.remove('active');
                const menuIcon = menuItem.querySelector('.menu-icon') as HTMLImageElement;
                if (menuIcon) {
                    const menuItemData = menuList.find((m: MenuItem) => m.ShowName === menuItem.querySelector('span')?.textContent);
                    if (menuItemData) {
                        menuIcon.src = menuItemData.IconConfig._1x.Default;
                    }
                }
            });
            
            // 添加当前菜单项的选中状态和图标
            li.classList.add('active');
            icon.src = item.IconConfig._1x.Selected;

            const url: string = item.Url.startsWith("http") ? item.Url : `http://${item.Url}`;
            
            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}`);
                showErrorModal(`无法访问 ${url}\r\n异常原因：${result.error ?? `status ${result.status}`}\r\n请联系10000技术支持。`);
            }
        });
    }

    return li;
}

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

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

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

// 显示故障窗口
function showErrorModal(message: string) {
    const errorModal = document.getElementById('errorModal') as HTMLDivElement;
    const errorMessage = document.getElementById('errorMessage') as HTMLParagraphElement;
    errorMessage.textContent = message;
    errorModal.style.display = 'block';
}

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

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

        // 绑定退出登录事件
        const logoutBtn = document.getElementById('btnLogout');
        if (logoutBtn) {
            logoutBtn.addEventListener('click', handleLogout);
        }

        const errorModal = document.getElementById('errorModal') as HTMLDivElement;
        const closeErrorModal = document.getElementById('closeErrorModal') as HTMLButtonElement;
        // 关闭按钮点击事件
        closeErrorModal.addEventListener('click', (event)=>{
            errorModal.style.display = 'none';
        });

        // 点击窗口外部关闭
        window.addEventListener('click', (event) => {
            if (event.target === errorModal) {
                errorModal.style.display = 'none';
            }
        });
    } catch (error) {
        console.error('初始化失败:', error);
    }
}

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