import { ElMessage } from 'element-plus';
export function errorHandling(error,type) {
    switch (error.name) {
        case 'NotAllowedError': 
        ElMessage.error(`用户拒绝了权限请求,请允许此网站使用${type}权限`);
        break;
        case 'NotFoundError':
        ElMessage.error(`未检测到可用的${type}设备,请检查${type}是否已正确连接`); 
        break;
        case 'NotSupportedError':
        ElMessage.error(`当前浏览器不支持${type}功能，请使用现代浏览器如Chrome、Firefox或Edge`);  
        break;
        case 'NotReadableError':
        ElMessage.error(`${type}设备正被其他应用程序占用，请关闭其他使用${type}的应用后重试`);  
        break;
        case 'OverconstrainedError':
        ElMessage.error(`${type}配置不兼容，请尝试调整${type}设置`);  
        break;
        default: 
        ElMessage.error('服务错误，请刷新重试');
    } 
}

// 处理数据接收事件
export function handleDataReceived(payload, participant, kind) {
    try {
        const decoder = new TextDecoder();
        const strData = decoder.decode(payload);
        ElMessage.info(`收到消息 from ${participant.identity}: ${strData}`);
    } catch (error) {
        console.error('处理接收消息失败:', error);
    }
}

export function handleReconnected() {
    ElMessage.success('已重新连接到房间');
}

// 获取设备名称
export function getDeviceName(devices, deviceId) {
    const device = devices.find(d => d.deviceId === deviceId);
    return device ? (device.label || '未知设备') : '未知设备';
}

export function handleVideoLoaded(identity, type) {
    // console.log(`视频加载完成: ${identity}的${type}视频`);
}

export function handleConnectionStateChanged(state) {
    // console.log('连接状态改变:', state);
}

// 平滑曲线绘制函数
export function drawSmoothCurve(ctx, path) {
    if (path.length < 3) {
        // 如果点太少，直接绘制直线
        ctx.beginPath();
        ctx.moveTo(path[0].x, path[0].y);
        for (let i = 1; i < path.length; i++) {
            ctx.lineTo(path[i].x, path[i].y);
        }
        return;
    }
    
    ctx.beginPath();
    ctx.moveTo(path[0].x, path[0].y);
    
    const threshold = 5; // 距离阈值，用于控制平滑度
    
    for (let i = 1; i < path.length - 2;) {
        let a = 1;
        // 寻找下一个足够远的点
        while (i + a < path.length - 2 &&
            Math.sqrt(Math.pow(path[i].x - path[i + a].x, 2) + 
                     Math.pow(path[i].y - path[i + a].y, 2)) < threshold) {
            a++;
        }
        
        const xc = (path[i].x + path[i + a].x) / 2;
        const yc = (path[i].y + path[i + a].y) / 2;
        
        ctx.quadraticCurveTo(path[i].x, path[i].y, xc, yc);
        i += a;
    }
    
    // 连接最后两个点
    ctx.lineTo(path[path.length - 1].x, path[path.length - 1].y);
}

//计算文件的SHA1值
export async function calculateFileSHA1(file) {
    const arrayBuffer = await file.arrayBuffer();
    const hashBuffer = await crypto.subtle.digest('SHA-1', arrayBuffer);
    const hashArray = Array.from(new Uint8Array(hashBuffer));
    const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
    return hashHex;
}

// 用于比较两个对象是否相等 
export function simpleDeepEqual(obj1, obj2) {
    return JSON.stringify(obj1) === JSON.stringify(obj2);
}

// 生成唯一ID
export function generateElementId() {
    return `laser_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
}