<template>
    <div class="card-chart" ref="chartRef"></div>
</template>

<script setup>
import { onMounted, ref } from "vue";
import * as echarts from "echarts";
import { galleryIndicatorLine } from "./chartSeting";
import { deepClone } from "@/common/commonFun";

const props = defineProps({
    type: {
        type: String,
        default: "",
    },
    chartJson: {
        type: String,
        required: true,
    },
});

let myChart = null;
const chartRef = ref();
const chartData = ref(JSON.parse(props.chartJson))

let chartDataArr = ref([
    { date: "9/1", value: 40 },
    { date: "9/7", value: 60 },
    { date: "9/13", value: 63 },
    { date: "9/19", value: 68 },
    { date: "9/25", value: 80, feature: true },
    { date: "10/1", value: 85, feature: true },
    { date: "10/7", value: 88, feature: true },
]);

const getFeatureSerie = (forecastData) => {
  return {
    name: "",
    type: "line",
    data: forecastData, // 取后三天的数据
    itemStyle: {
      color: "#CECECE", // 设置数据点颜色
    },
    lineStyle: {
      type: "dashed", // 设置线条为虚线
      width: 2, // 设置线条宽度
      color: "#CECECE", // 设置线条颜色
    },
  }
}

onMounted(() => {
    myChart = echarts.init(chartRef.value);
    const options = deepClone(galleryIndicatorLine);
    if (props.type === "feature") {
        processData();
        const series = []
        chartData.value.datas.forEach(({name,values}) => {
          // 数据处理
          let currentData = [];
          let forecastData = [];
          for(let i = 0; i < chartData.value.dates.length; i++){
            let item = chartData.value.dates[i];
            if (item.feature) {
              forecastData.push([item.date, Number(values[i])]);
            } else {
              currentData.push([item.date, Number(values[i])]);
            }
          }
          // 追加实际数据的最后一组数据
          forecastData.unshift(currentData[currentData.length - 1]);
          options.series.forEach((item) => {
            if(item.name === name){
              item.data = currentData;
              series.push(item)
              series.push(getFeatureSerie(forecastData))
            }
          })
        })
        options.series = series;
    } else {
        // 完成农事
        let seriesData = chartData.value.map((m) => {
            return Number(m.value);
        });

        options.series = [
            {
                data: seriesData,
                type: "line",
                symbolSize: 6,
                itemStyle: {
                    color: "#2199F8", // 设置数据点颜色为红色
                },
            },
        ];
    }

    let labels = chartData.value.dates.map((m) => {
        return m.date;
    });

    options.xAxis.data = labels;
    // if (props.type === "normal") {
    //     options.series = [
    //         {
    //             data: [40, 58, 62, 64, 68, 74, 80],
    //             type: "line",
    //             symbolSize: 6,
    //             itemStyle: {
    //                 color: "#2199F8", // 设置数据点颜色为红色
    //             },
    //         },
    //     ];
    // } else {
    //     // options.series = [
    //     //     {
    //     //         data: [40, 58, 62, 64, 68, 74, 80],
    //     //         type: "line",
    //     //         symbolSize: 6,

    //     //         itemStyle: {
    //     //             color: "#CECECE", // 设置数据点颜色
    //     //         },
    //     //         lineStyle: {
    //     //             type: "dashed", // 设置线条为虚线
    //     //             width: 2, // 设置线条宽度
    //     //             color: "#CECECE", // 设置线条颜色
    //     //         },
    //     //     },
    //     // ];
    //     options.series = [
    //         {
    //             name: "实线数据",
    //             type: "line",
    //             data: currentData, // 取前四天（包括当天）的数据
    //             lineStyle: {
    //                 type: "solid", // 这里可以省略，因为我们在下面通过itemStyle为每个点设置样式时会更具体
    //             },
    //             itemStyle: {
    //                 color: "#2199F8", // 设置数据点颜色为红色
    //             },
    //         },
    //         {
    //             name: "虚线数据",
    //             type: "line",
    //             data: forecastData, // 取后三天的数据
    //             itemStyle: {
    //                 color: "#CECECE", // 设置数据点颜色
    //             },
    //             lineStyle: {
    //                 type: "dashed", // 设置线条为虚线
    //                 width: 2, // 设置线条宽度
    //                 color: "#CECECE", // 设置线条颜色
    //             },
    //         },
    //     ];
    // }
    myChart.setOption(options);
});

const processData = () => {
    const today = new Date();
    const datePattern = /(\d+)\/(\d+)/; // 日期格式匹配，假设为MM/DD
    let dates = chartData.value.dates;
    chartData.value.dates = []
    dates.forEach((date) => {
        let item = {date: date, feature: false};
        const match = item.date.match(datePattern);
        if (match) {
            const month = parseInt(match[1], 10);
            const day = parseInt(match[2], 10);
            const itemDate = new Date(today.getFullYear(), month - 1, day); // 月份从0开始，所以需要减1
            if (itemDate > today) {
                item.feature = true;
            }
            chartData.value.dates.push(item);
        }
    });
};
</script>

<style lang="scss" scoped>
.card-chart {
    padding: 8px 4px 0 4px;
    width: 100%;
    height: 130px;
    box-sizing: border-box;
}
</style>
