import React, { useEffect, useState } from 'react'
import ReactECharts from 'echarts-for-react'

import { ChartsHeader } from '../../components'
import { useStateContext } from '../../contexts/ContextProvider'
import { getDayScreenUseTime } from '../../service/getDayScreenUseTime/index'

const Line2 = () => {
    const { currentColor, currentMode } = useStateContext()
    let [option, setOption] = useState({})

    /* 生成本周日期, 格式为 MM-DD */
    function convertDate(date) {
        // 格式化日期
        var yyyy = date.getFullYear().toString()
        var mm = (date.getMonth() + 1).toString()
        var dd = (date.getDate() + 1).toString()

        var mmChars = mm.split('')
        var ddChars = dd.split('')

        return (mmChars[1] ? mm : '0' + mmChars[0]) + '-' + (ddChars[1] ? dd : '0' + ddChars[0])
    }

    let currentWeekDates = new Array(7)
    for (let i = 0; i < 7; i++) {
        const curr = new Date()
        currentWeekDates[i] = convertDate(new Date(curr.setDate(curr.getDate() - curr.getDay() + i)))
    }

    let currentWeekFirstScreenTime = new Array(7)
    let bgColor = '#fff'
    let color = ['#0090FF', '#36CE9E', '#FFC005', '#FF515A', '#8B5CFF', '#00CA69']
    let echartData = [
        {
            name: '周一',
            value1: 100
        },
        {
            name: '周二',
            value1: 138
        },
        {
            name: '周三',
            value1: 350
        },
        {
            name: '周四',
            value1: 173
        },
        {
            name: '周五',
            value1: 180
        },
        {
            name: '周六',
            value1: 150
        },
        {
            name: '周日',
            value1: 180
        }
    ]
    let xAxisData = echartData.map(v => v.name)
    for (let i = 0; i < 7; i++) {
        xAxisData[i] = xAxisData[i] + ' ' + currentWeekDates[i]
    }

    const hexToRgba = (hex, opacity) => {
        let rgbaColor = ''
        let reg = /^#[\da-f]{6}$/i
        if (reg.test(hex)) {
            rgbaColor = `rgba(${parseInt('0x' + hex.slice(1, 3))},${parseInt('0x' + hex.slice(3, 5))},${parseInt('0x' + hex.slice(5, 7))},${opacity})`
        }
        return rgbaColor
    }

    useEffect(async () => {
        for (let i = 0; i < 7; i++) {
            let receivedJson = await getDayScreenUseTime('2022-' + currentWeekDates[i])
            let firstScreenTimeH = parseInt(receivedJson.data.lastScreenTime.substring(0, 2))
            let firstScreenTimeM = parseInt(receivedJson.data.lastScreenTime.substring(3, 5))
            let firstScreenTimeS = parseInt(receivedJson.data.lastScreenTime.substring(6, 8))
            if (firstScreenTimeH !== NaN && firstScreenTimeM !== NaN && firstScreenTimeS !== NaN) {
                currentWeekFirstScreenTime[i] = 3600 * firstScreenTimeH + 60 * firstScreenTimeM + firstScreenTimeS
            } else {
                currentWeekFirstScreenTime[i] = NaN
            }
        }

        setOption({
            backgroundColor: bgColor,
            color: color,
            legend: {
                right: 10,
                top: 10
            },
            tooltip: {
                trigger: 'axis',
                formatter: function (params) {
                    let html = ''
                    params.forEach(v => {
                        if (!isNaN(v.value)) {
                            html += `<div style="color: #666;font-size: 14px;line-height: 24px">
                            <span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:${color[v.componentIndex]};"></span>
                            ${v.seriesName}
                            <span style="color:${color[v.componentIndex]};font-weight:700;font-size: 18px">${Math.floor(v.value / 3600) + '时' + Math.floor((v.value % 3600) / 60) + '分钟' + Math.floor(v.value % 60) + '秒'}</span>
                            `
                        } else {
                            html = `<div style="color: #666;font-size: 14px;line-height: 24px">
                    <span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:${color[v.componentIndex]};"></span>
                    ${v.seriesName}
                    <span style="color:${color[v.componentIndex]};font-weight:700;font-size: 18px">该天还尚未开始</span>
                    `
                        }
                    })
                    return html
                },
                extraCssText: 'background: #fff; border-radius: 0;box-shadow: 0 0 3px rgba(0, 0, 0, 0.2);color: #333;',
                axisPointer: {
                    type: 'shadow',
                    shadowStyle: {
                        color: '#ffffff',
                        shadowColor: 'rgba(225,225,225,1)',
                        shadowBlur: 5
                    }
                }
            },
            grid: {
                top: 100,
                containLabel: true
            },
            xAxis: [
                {
                    type: 'category',
                    boundaryGap: false,
                    axisLabel: {
                        formatter: '{value}',
                        textStyle: {
                            color: '#333'
                        }
                    },
                    axisLine: {
                        lineStyle: {
                            color: '#D9D9D9'
                        }
                    },
                    data: xAxisData.map(function (str) {
                        return str.replace(' ', '\n')
                    })
                }
            ],
            yAxis: [
                {
                    type: 'value',
                    // name: '单位:万千瓦时',
                    axisLabel: {
                        textStyle: {
                            color: '#666'
                        },
                        formatter: (value, index, format) => {
                            return Math.floor(value / 3600) + '时'
                        }
                    },
                    max: 86400,
                    nameTextStyle: {
                        color: '#666',
                        fontSize: 12,
                        lineHeight: 40
                    },
                    splitLine: {
                        lineStyle: {
                            type: 'dashed',
                            color: '#E9E9E9'
                        }
                    },
                    axisLine: {
                        show: false
                    },
                    axisTick: {
                        show: false
                    }
                }
            ],
            series: [
                {
                    name: '最后一次屏幕使用时刻',
                    type: 'line',
                    smooth: true,
                    // showSymbol: false,/
                    symbolSize: 8,
                    zlevel: 3,
                    lineStyle: {
                        normal: {
                            color: color[0],
                            shadowBlur: 3,
                            shadowColor: hexToRgba(color[0], 0.5),
                            shadowOffsetY: 8
                        }
                    },
                    areaStyle: {
                        // normal: {
                        //     color: new echarts.graphic.LinearGradient(
                        //         0,
                        //         0,
                        //         0,
                        //         1,
                        //         [
                        //             {
                        //                 offset: 0,
                        //                 color: hexToRgba(color[0], 0.3)
                        //             },
                        //             {
                        //                 offset: 1,
                        //                 color: hexToRgba(color[0], 0.1)
                        //             }
                        //         ],
                        //         false
                        //     ),
                        shadowColor: hexToRgba(color[0], 0.1),
                        shadowBlur: 10
                    },
                    data: currentWeekFirstScreenTime
                }
            ]
        })
    }, [])

    return (
        <div className="m-4 md:m-10 mt-24 p-10 bg-white dark:bg-secondary-dark-bg rounded-3xl">
            <ChartsHeader category="Line" title="最后屏幕使用时刻" />
            <div className="w-full">
                <ReactECharts option={option} style={{ height: '600px' }}></ReactECharts>
            </div>
        </div>
    )
}

export default Line2