import { getImage } from '@/utils/comm';
import { VNode } from 'vue';

export type ListProps = {
    key: string;
    name: string;
    desc?: string;
    status: 'loading' | 'error' | 'success' | 'warning';
    text?: string;
    info?: VNode | null;
};

export const TextColorMap = new Map();
TextColorMap.set('loading', 'black');
TextColorMap.set('error', 'red');
TextColorMap.set('success', 'green');
TextColorMap.set('warning', '#FAB247');

export const StatusMap = new Map();
StatusMap.set('error', getImage('/diagnose/status/error.png'));
StatusMap.set('success', getImage('/diagnose/status/success.png'));
StatusMap.set('warning', getImage('/diagnose/status/warning.png'));
StatusMap.set('loading', getImage('/diagnose/status/loading.png'));

export const networkInitList: ListProps[] = [
    // {
    //   key: 'access',
    //   name: '设备接入配置',
    //   desc: '诊断该设备所属产品是否已配置“设备接入”方式，未配置将导致设备连接失败。',
    //   status: 'loading',
    //   text: '正在诊断中...',
    //   info: null,
    // },
    {
        key: 'network',
        name: '网络组件',
        desc: '诊断网络组件配置是否正确，配置错误将导致设备连接失败',
        status: 'loading',
        text: '正在诊断中...',
        info: null,
    },
    {
        key: 'gateway',
        name: '设备接入网关',
        desc: '诊断设备接入网关状态是否正常，禁用状态将导致连接失败',
        status: 'loading',
        text: '正在诊断中...',
        info: null,
    },
    {
        key: 'product',
        name: '产品状态',
        desc: '诊断产品状态是否正常，禁用状态将导致设备连接失败',
        status: 'loading',
        text: '正在诊断中...',
        info: null,
    },
    {
        key: 'device',
        name: '设备状态',
        desc: '诊断设备状态是否正常，禁用状态将导致设备连接失败',
        status: 'loading',
        text: '正在诊断中...',
        info: null,
    },
];

export const childInitList: ListProps[] = [
    // {
    //   key: 'access',
    //   name: '设备接入配置',
    //   desc: '诊断该设备所属产品是否已配置“设备接入”方式，未配置将导致设备连接失败。',
    //   status: 'loading',
    //   text: '正在诊断中...',
    //   info: null,
    // },
    // {
    //   key: 'network',
    //   name: '网络组件',
    //   desc: '诊断网络组件配置是否正确，配置错误将导致设备连接失败',
    //   status: 'loading',
    //   text: '正在诊断中...',
    //   info: null,
    // },
    {
        key: 'gateway',
        name: '设备接入网关',
        desc: '诊断设备接入网关状态是否正常，网关配置是否正确',
        status: 'loading',
        text: '正在诊断中...',
        info: null,
    },
    {
        key: 'parent-device',
        name: '网关父设备',
        desc: '诊断网关父设备状态是否正常，禁用或离线将导致连接失败',
        status: 'loading',
        text: '正在诊断中...',
        info: null,
    },
    {
        key: 'product',
        name: '产品状态',
        desc: '诊断产品状态是否正常，禁用状态将导致设备连接失败',
        status: 'loading',
        text: '正在诊断中...',
        info: null,
    },
    {
        key: 'device',
        name: '设备状态',
        desc: '诊断设备状态是否正常，禁用状态将导致设备连接失败',
        status: 'loading',
        text: '正在诊断中...',
        info: null,
    },
];

export const cloudInitList: ListProps[] = [
    // {
    //   key: 'access',
    //   name: '设备接入配置',
    //   desc: '诊断该设备所属产品是否已配置“设备接入”方式，未配置将导致设备连接失败。',
    //   status: 'loading',
    //   text: '正在诊断中...',
    //   info: null,
    // },
    {
        key: 'gateway',
        name: '设备接入网关',
        desc: '诊断设备接入网关状态是否正常，网关配置是否正确',
        status: 'loading',
        text: '正在诊断中...',
        info: null,
    },
    {
        key: 'product',
        name: '产品状态',
        desc: '诊断产品状态是否正常，禁用状态将导致设备连接失败',
        status: 'loading',
        text: '正在诊断中...',
        info: null,
    },
    {
        key: 'device',
        name: '设备状态',
        desc: '诊断设备状态是否正常，禁用状态将导致设备连接失败',
        status: 'loading',
        text: '正在诊断中...',
        info: null,
    },
];

export const channelInitList: ListProps[] = [
    // {
    //   key: 'access',
    //   name: '设备接入配置',
    //   desc: '诊断该设备所属产品是否已配置“设备接入”方式，未配置将导致设备连接失败。',
    //   status: 'loading',
    //   text: '正在诊断中...',
    //   info: null,
    // },
    {
        key: 'gateway',
        name: '设备接入网关',
        desc: '诊断设备接入网关状态是否正常，禁用状态将导致连接失败',
        status: 'loading',
        text: '正在诊断中...',
        info: null,
    },
    {
        key: 'product',
        name: '产品状态',
        desc: '诊断产品状态是否正常，禁用状态将导致设备连接失败',
        status: 'loading',
        text: '正在诊断中...',
        info: null,
    },
    {
        key: 'device',
        name: '设备状态',
        desc: '诊断设备状态是否正常，禁用状态将导致设备连接失败',
        status: 'loading',
        text: '正在诊断中...',
        info: null,
    },
];

export const mediaInitList: ListProps[] = [
    // {
    //   key: 'access',
    //   name: '设备接入配置',
    //   desc: '诊断该设备所属产品是否已配置“设备接入”方式，未配置将导致设备连接失败。',
    //   status: 'loading',
    //   text: '正在诊断中...',
    //   info: null,
    // },
    {
        key: 'gateway',
        name: '设备接入网关',
        desc: '诊断设备接入网关状态是否正常，禁用状态将导致连接失败',
        status: 'loading',
        text: '正在诊断中...',
        info: null,
    },
    {
        key: 'product',
        name: '产品状态',
        desc: '诊断产品状态是否正常，禁用状态将导致设备连接失败',
        status: 'loading',
        text: '正在诊断中...',
        info: null,
    },
    {
        key: 'device',
        name: '设备状态',
        desc: '诊断设备状态是否正常，禁用状态将导致设备连接失败',
        status: 'loading',
        text: '正在诊断中...',
        info: null,
    },
];

export const modifyArrayList = (oldList: ListProps[], item: ListProps, index?: number) => {
    let newList: ListProps[] = [];
    if (index !== 0 && !index) {
        // 添加
        for (let i = 0; i < oldList.length; i++) {
            const dt = oldList[i];
            if (item.key === dt.key) {
                newList.push(item);
            } else {
                newList.push(dt);
            }
        }
    } else {
        // 修改
        oldList.splice(index, 0, item);
        newList = [...oldList];
    }
    return newList;
};

export const isExit = (arr1: any[], arr2: any[]) => {
    return arr1.find((item) => arr2.includes(item));
};

export const gatewayList = [
    'websocket-server',
    'http-server-gateway',
    'udp-device-gateway',
    'coap-server-gateway',
    'mqtt-client-gateway',
    'tcp-server-gateway',
];

export const urlMap = new Map();
urlMap.set('mqtt-client-gateway', 'topic');
urlMap.set('http-server-gateway', 'url');
urlMap.set('websocket-server', 'url');
urlMap.set('coap-server-gateway', 'url');
urlMap.set('udp-device-gateway', 'url');
urlMap.set('tcp-server-gateway', 'url');

