const dataProcessing = (arr: any[]) => {
    return arr
        .filter(item => typeof item === 'number' || (typeof item === 'string' && !isNaN(parseFloat(item))))
        .map(item => (typeof item === 'number' ? item : parseFloat(item)))
}
const calculateValue = (o: number, value: number, num: number, isMin: boolean) => {
    if (value === 0) {
        return 0
    } else if (value > 0 && Math.abs(value) < 1 && isMin == true) {
        return 0
    } else if (value > -1 && value < 0 && isMin == false) {
        return 0
    }
    let base
    if (Math.abs(o) >= 100) {
        base = 100
    } else if (Math.abs(o) >= 10) {
        base = 10
    } else if (Math.abs(o) >= 1) {
        base = 1
    } else {
        base = 0.1
    }
    let calculatedValue
    if (isMin) {
        if (value < 0) {
            calculatedValue = value + num * value
        } else {
            calculatedValue = value - num * value
        }
    } else {
        if (value < 0) {
            calculatedValue = value - num * value
        } else {
            calculatedValue = value + num * value
        }
    }
    if (base === 0.1) {
        return parseFloat(calculatedValue.toFixed(1))
    } else if (isMin) {
        return Math.floor(calculatedValue / base) * base
    } else {
        return Math.ceil(calculatedValue / base) * base
    }
}

// 处理y轴最大最小值
export const yMethod = (arr: any) => {
    let num = 0.1
    let numList = dataProcessing(arr)
    let maxValue = 0
    let minValue = 0
    let max = 0
    let min = 0
    maxValue = Math.max(...numList)
    minValue = Math.min(...numList)
    const o = maxValue - minValue
    if (Math.abs(o) >= 300) {
        num = 0.02
    }

    min = calculateValue(o, minValue, num, true)
    max = calculateValue(o, maxValue, num, false)
    // if (-100 >= minValue) {
    //     min = Math.floor((minValue + num * minValue) / 100) * 100
    // } else if (-10 >= minValue && minValue > -100) {
    //     min = Math.floor((minValue + num * minValue) / 10) * 10
    // } else if (-1 >= minValue && minValue > -10) {
    //     min = Math.floor(minValue + num * minValue)
    // } else if (0 > minValue && minValue > -1) {
    //     min = parseFloat((minValue + num * minValue).toFixed(1))
    // } else if (minValue == 0) {
    //     min = 0
    // } else if (0 < minValue && minValue < 1) {
    //     min = parseFloat((minValue - num * minValue).toFixed(1))
    // } else if (1 <= minValue && minValue < 10) {
    //     min = Math.floor(minValue - num * minValue)
    // } else if (10 <= minValue && minValue < 100) {
    //     min = Math.floor((minValue - num * minValue) / 10) * 10
    // } else if (100 <= minValue) {
    //     min = Math.floor((minValue - num * minValue) / 100) * 100
    // }

    // if (-100 >= maxValue) {
    //     max = Math.ceil((maxValue - num * maxValue) / 100) * 100
    // } else if (-10 >= maxValue && maxValue > -100) {
    //     max = Math.ceil((maxValue - num * maxValue) / 10) * 10
    // } else if (-1 >= maxValue && maxValue > -10) {
    //     max = Math.ceil(maxValue - num * maxValue)
    // } else if (0 > maxValue && maxValue > -1) {
    //     max = parseFloat((maxValue - num * maxValue).toFixed(1))
    // } else if (maxValue == 0) {
    //     max = 0
    // } else if (0 < maxValue && maxValue < 1) {
    //     max = parseFloat((maxValue + num * maxValue).toFixed(1))
    // } else if (1 <= maxValue && maxValue < 10) {
    //     max = Math.ceil(maxValue + num * maxValue)
    // } else if (10 <= maxValue && maxValue < 100) {
    //     max = Math.ceil((maxValue + num * maxValue) / 10) * 10
    // } else if (100 <= maxValue) {
    //     max = Math.ceil((maxValue + num * maxValue) / 100) * 100
    // }

    // if (maxValue > 1000 || minValue < -1000) {
    //     max = Math.ceil(maxValue / 100) * 100
    //     if (minValue == 0) {
    //         min = 0
    //     } else {
    //         min = Math.floor(minValue / 100) * 100
    //     }
    // } else if (maxValue < 60 && minValue > 40) {
    //     max = 60
    //     min = 40
    // } else if (maxValue == minValue && maxValue < 10 && minValue > 0) {
    //     max = Math.ceil(maxValue / 10) * 10
    //     min = Math.floor(minValue / 10) * 10
    // } else if (maxValue == minValue && maxValue != 0 && minValue != 0) {
    //     max = Math.ceil(maxValue / 10 + 1) * 10
    //     min = Math.floor(minValue / 10 - 1) * 10
    // } else {
    //     max = Math.ceil(maxValue / 10) * 10
    //     min = Math.floor(minValue / 10) * 10
    // }

    // if (maxValue > 0 && maxValue < 1) {
    //     max = 1
    // } else if (max == 0 && minValue > -1 && minValue < 0) {
    //     min = -1
    // }

    return [min, max]
}

/**
 * title['A相','B相',]
 * data[[1,2],[3,4]]
 */
// 导出csv文件
const convertToCSV = (title: any, data: any) => {
    console.log('🚀 ~ convertToCSV ~ data:', data)
    let csv = ''
    // 添加列头
    csv += ',' + title.join(',') + '\n'
    // 遍历数据并添加到CSV字符串中
    data?.map(item => {
        csv += item.join(',') + '\n'
    })
    return csv
}
export const exportCSV = (title: object, data: any, filename: string) => {
    const csv = convertToCSV(title, data)
    const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' })
    const link = document.createElement('a')
    link.href = URL.createObjectURL(blob)
    link.download = filename
    link.click()
    // 释放URL对象
    URL.revokeObjectURL(link.href)
}
