<!-- 
    filename: GasChart.vue
    author: liubin
    date: 2023-12-12 10:53:49
    description: 
-->

<template>
	<div class="gas-chart"></div>
</template>

<script>
import * as echarts from 'echarts';
import resize from './../mixins/resize'

export default {
	name: 'GasChart',
	mixins: [resize],
	components: {},
	props: {
		chartType: '', // 能源类型
		chartTime: ''
	},
	data() {
		const colors = [
			'#12FFF5',
			'#2760FF',
			'#FFD160',
			'#E80091',
			'#8064ff',
			'#ff8a3b',
			'#8cd26d',
			'#2aa1ff',
		];
		return {
			chart: null
		};
	},
	computed: {
		gasChartMsg() {
			return this.$store.state.websocket.sumGasInfo
		},
		energyWeekTrend() {
			return this.$store.state.websocket.energyWeekTrend
		},
		energyMonthTrend() {
			return this.$store.state.websocket.energyMonthTrend
		},
		energyYearTrend() {
			return this.$store.state.websocket.energyYearTrend
		}
	},
	watch: {
		energyWeekTrend: {// 监听周电能,更新图
			handler(newVal, oldVal) {
				if (this.chartTime === '周' && this.chartType === '电耗能') {
					this.updateChart()
				}
			}
		},
		energyMonthTrend: {// 监听月电能,更新图
			handler(newVal, oldVal) {
				if (this.chartTime === '月' && this.chartType === '电耗能') {
					this.updateChart()
				}
			}
		},
		energyYearTrend: {// 监听年电能,更新图
			handler(newVal, oldVal) {
				if (this.chartTime === '年' && this.chartType === '电耗能') {
					this.updateChart()
				}
			}
		},
		gasChartMsg: {// 监听天然气,更新图
			handler(newVal, oldVal) {
				if (this.chartType === '天然气I' || this.chartType === '天然气II') {
					this.updateChart()
				}
			}
		},
		chartTime: {// 监听时间变化,更新图
			handler(newVal, oldVal) {
				this.updateChart()
			}
		},
		chartType: {// 监听能源类型变化,更新图
			handler(newVal, oldVal) {
				this.updateChart()
			}
		}
	},
	mounted() {
		this.$el.addEventListener('resize', () => {
			console.log('resziing.....');
		});
		this.updateChart()
	},
	methods: {
		updateChart() {
			let gasName  = ''
			const colors = ['#FFCB59'];
			let temp = []
			let seriesData = []
			let xData = []
			let yData = []
			switch (this.chartType) {
				case '电耗能':{
					gasName = '电耗能'
					if (this.chartTime === '周') {
						temp = this.energyWeekTrend || []
					}else if(this.chartTime === '月') {
						temp = this.energyMonthTrend || []
					}else{
						temp = this.energyYearTrend || []
					}
					temp && temp.map(i => {
						xData.push(i.time)
						yData.push(i.qty)
					})
					break;
				}
				case '天然气I':{
					if (this.chartTime === '周') {
						yData = this.gasChartMsg.hisSumGas1For7Day || []
					}else if(this.chartTime === '月') {
						yData = this.gasChartMsg.sumGas1ForMonth || []
					}else{
						yData = this.gasChartMsg.sumGas1ForYear || []
					}
					gasName = '天然气I'
					xData = this.getXdata()
					break;
				}
				default:
				gasName = '天然气II'
				if (this.chartTime === '周') {
						yData = this.gasChartMsg.hisSumGas2For7Day || []
					}else if(this.chartTime === '月') {
						yData = this.gasChartMsg.sumGas2ForMonth || []
					}else{
						yData = this.gasChartMsg.sumGas2ForYear || []
					}
				xData = this.getXdata()
			}
			if (yData.length == 0) {
				seriesData = []
			}else {
				seriesData = [{
					name: gasName,
					data: yData,
					type: "line",
					areaStyle: {
							color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
							{ offset: 0, color: '#FFCB59' + "40" },
							{ offset: 0.5, color: '#FFCB59' + "20" },
							{ offset: 1, color: '#FFCB59' + "00" },
							]),
					},
					lineStyle: {
							width: 1
					},
					symbolSize: 1,
					emphasis: {
							focus: 'series'
					}
				}]
					
			}
			// 绘图
			if (
        this.chart !== null &&
        this.chart !== '' &&
        this.chart !== undefined
      ) {
        this.chart.dispose() // 页面多次刷新会出现警告,Dom已经初始化了一个实例,这是销毁实例
      }
			this.chart = echarts.init(this.$el);
			var option = {
				color: colors,
				grid: { top: 32, right: 12, bottom: 20, left: 60 },
				xAxis: {
					type: 'category',
					data: xData,
					axisLabel: {
						color: '#fff',
						fontSize: 12,
					},
					axisTick: { show: false },
					axisLine: {
						lineStyle: {
							width: 1,
							color: '#213259',
						},
					},
				},
				yAxis: {
					name: '单位m³/h',
					nameTextStyle: {
						color: '#fff',
						fontSize: 10,
						align: 'right',
					},
					type: 'value',
					axisLabel: {
						color: '#fff',
						fontSize: 12,
					},
					axisLine: {
						show: true,
						lineStyle: {
							color: '#213259',
						},
					},
					splitLine: {
						lineStyle: {
							color: '#213259a0',
						},
					},
				},
				series: seriesData,
				tooltip: {
					trigger: 'axis',
					className: "gas-tooltip"
				},
			}
			option && this.chart.setOption(option)
		},
		getXdata() {
			const today = new Date();
			const currentYear = today.getFullYear();
			const currentMonth = today.getMonth() + 1;
			let days = 30;
			if (this.chartTime === '周') {
				return Array(7)
						.fill(1)
						.map((_, index) => {
							const today = new Date();
							const dtimestamp = today - (index+1) * 24 * 60 * 60 * 1000;
							return `${new Date(dtimestamp).getMonth() + 1}.${new Date(
								dtimestamp
							).getDate()}`;}).reverse()
			}else if (this.chartTime == "月") {
				if (currentMonth in [1, 3, 5, 7, 8, 10, 12]) {
					days = 31;
				} else if (currentMonth == 2) {
					days = this.isLeapYear(currentYear) ? 29 : 28;
				}
				return Array(days)
						.fill(1)
						.map((_, index) => {
							return `${currentMonth}.${days - index}`;}).reverse()
			} else {
				return Array(12)
						.fill(1)
						.map((_, index) => {
							return `${currentYear}.${12 - index}`;}).reverse()
			}
		},
		isLeapYear(year) {
			return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
		}
	},
};
</script>

<style scoped lang="scss">
.gas-chart {
	width: 100%;
	height: 100%;
}
</style>
<style>
  .gas-tooltip {
    background: #0a2b4f77 !important;
    border: none !important;
    backdrop-filter: blur(12px);
  }
  .gas-tooltip * {
    color: #fff !important;
  }
</style>