// 助燃风流量
import cls from "./index.module.css";
import BottomBarItem from "../BottomItemBackground";
import ReactECharts from "echarts-for-react";
import * as echarts from "echarts";
import { Switch } from "antd";
import { useState, useEffect } from "react";
import { useSelector, useDispatch } from "react-redux";

// function mockData(type = "runtime") {
//   const RUNTIME_DATA_LENGTH = 8;
//   const MAX_HISTORY_DATA_LENGTH = 8;
//   const WEEK = 7;

//   switch (type) {
//     case "runtime":
//       return [
//         ...Array.from(
//           { length: RUNTIME_DATA_LENGTH },
//           () => Math.floor(Math.random() * 100) + "m³/h"
//         ),
//       ];
//     case "history":
//       return {
//         ...Array.from(
//           { length: Math.floor(Math.random() * MAX_HISTORY_DATA_LENGTH) },
//           (_, index) => ({
//             ["GAS_" + index]: [
//               ...Array.from({ length: WEEK }, () =>
//                 Math.floor(Math.random() * 100)
//               ),
//             ],
//           })
//         ).reduce((arr, curr) => ({ ...arr, ...curr }), {}),
//       };
//     default:
//       break;
//   }
// }

/** 助燃风流量 */
function GasI(props) {
  const [showChart, setShowChart] = useState(true);
  // const dispath = useDispatch();
  const runState = useSelector((state) => state.combustionAir.runtime);
  const hisState = useSelector((state) => state.combustionAir.history);

  // useEffect(() => {
  //   setInterval(() => {
  //     dispath({
  //       type: "combustionAir/setRuntime",
  //       payload: mockData("runtime"),
  //     });
  //     dispath({
  //       type: "combustionAir/setHistory",
  //       payload: mockData("history"),
  //     });
  //   }, 60000);
  // }, [dispath]);

  let dataList = [];
  let seriesData = [];
  const colors = [
    "#12FFF5",
    "#2760FF",
    "#FFD160",
    "#E80091",
    "#8064ff",
    "#ff8a3b",
    "#8cd26d",
    "#2aa1ff",
  ];
  let options = null;
  if (showChart) {
    // keys() 结果不是按照顺序,需要 sort()
    seriesData =
      hisState != null
        ? Object.keys(hisState)
            .sort()
            .map((key) => hisState[key])
        : Array(8)
            .fill(1)
            .map((_) => Array(7).fill(0));

    options = {
      color: colors,
      grid: { top: 32, right: 12, bottom: 20, left: 48 },
      xAxis: {
        type: "category",
        data: Array(7)
          .fill(1)
          .map((_, index) => {
            const today = new Date();
            const dtimestamp = today - index * 24 * 60 * 60 * 1000;
            return `${new Date(dtimestamp).getMonth() + 1}.${new Date(
              dtimestamp
            ).getDate()}`;
          })
          .reverse(),
        axisLabel: {
          color: "#fff",
          fontSize: 12,
        },
        axisTick: { show: false },
        axisLine: {
          lineStyle: {
            width: 1,
            color: "#213259",
          },
        },
      },
      yAxis: {
        name: "单位/m³",
        nameTextStyle: {
          color: "#fff",
          fontSize: 10,
          align: "right",
        },
        type: "value",
        axisLabel: {
          color: "#fff",
          fontSize: 12,
        },
        axisLine: {
          show: true,
          lineStyle: {
            color: "#213259",
          },
        },
        splitLine: {
          lineStyle: {
            color: "#213259a0",
          },
        },
        // interval: 10,
        // min: 0,
        // max: 100,
      },
      series: seriesData.map((v, i) => ({
        name: i + 1 + "#助燃风流量",
        data: v,
        type: "line",
        symbol: "circle",
        areaStyle: {
          color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
            { offset: 0, color: colors[i % colors.length] + "40" },
            { offset: 0.5, color: colors[i % colors.length] + "20" },
            { offset: 1, color: colors[i % colors.length] + "00" },
          ]),
        },
      })),
      tooltip: {
        trigger: "axis",
      },
    };
  } else {
    dataList =
      runState != null
        ? [
            { id: 1, name: "1#助燃风流量", value: "0m³/h" },
            { id: 2, name: "2#助燃风流量", value: "0m³/h" },
            { id: 3, name: "3#助燃风流量", value: "0m³/h" },
            { id: 4, name: "4#助燃风流量", value: "0m³/h" },
            { id: 5, name: "5#助燃风流量", value: "0m³/h" },
            { id: 6, name: "6#助燃风流量", value: "0m³/h" },
            { id: 7, name: "7#助燃风流量", value: "0m³/h" },
            { id: 8, name: "8#助燃风流量", value: "0m³/h" },
          ].map((item, index) => ({
            ...item,
            value: runState[index] ?? "/",
          }))
        : [
            { id: 1, name: "1#助燃风流量", value: "0m³/h" },
            { id: 2, name: "2#助燃风流量", value: "0m³/h" },
            { id: 3, name: "3#助燃风流量", value: "0m³/h" },
            { id: 4, name: "4#助燃风流量", value: "0m³/h" },
            { id: 5, name: "5#助燃风流量", value: "0m³/h" },
            { id: 6, name: "6#助燃风流量", value: "0m³/h" },
            { id: 7, name: "7#助燃风流量", value: "0m³/h" },
            { id: 8, name: "8#助燃风流量", value: "0m³/h" },
          ];
  }

  function handleSwitchChange(val) {
    if (val) {
      setShowChart(true);
    } else {
      setShowChart(false);
    }
  }
  return (
    <BottomBarItem
      icon="pause"
      title="助燃风流量"
      className={cls.gas}
      style={props.style}
    >
      <div className={cls.headWidget}>
        <div className="flex items-center">
          <Switch size="small" defaultChecked onChange={handleSwitchChange} />
          {showChart && <span className={cls.switchLabel}>历史详情</span>}
          {!showChart && <span className={cls.switchLabel}>实时流量</span>}
        </div>
      </div>

      <div className={cls.chart}>
        {showChart && (
          <ReactECharts option={options} style={{ height: "100%" }} />
        )}
        {!showChart && (
          <div className={cls.gridList}>
            {dataList.map((item) => (
              <div key={item.id} className={cls.listItem}>
                {item.name}: {item.value}
              </div>
            ))}
          </div>
        )}
      </div>
    </BottomBarItem>
  );
}

export default GasI;