<template>
  <div
    class="heat_main"
    :style="`${
      trayInfo.isSelect
        ? 'border:4px solid rgb(66 215 76)'
        : 'border:4px solid #ffffff'
    }`"
  >
    <section class="heat_pos_text">
      <div class="pos_text">{{ trayInfo.name }}</div>
      <div class="pos_text pos_state">{{trayInfo.heatAearStatus?.trayStatus == 1 ? '已放置' : '空闲'}}</div>
    </section>

		<section class="heat_pos" :style="`background:${trayInfo?.id ? '' : ''}`">
			<div
				v-for="(tube, index) in trayInfo.tubeList || tubeList"
				:key="index"
				class="inner-circle"
				@click.stop="onHandleTube(tube, index)"
				:style="{ background: tube.backgroudColor || 'rgb(212, 212, 212)' }"></div>
			<!--执行中状态的遮罩层-->
			<div
				class="craft_executing_modal"
				v-if="trayInfo.craftInfo?.id"
				:style="{ background: !trayInfo.executing_craft ? '#FFDFC2' : '#8BFFBF' }">
				<!--trayInfo.executing_craft 已选择工艺未执行-->
				<div class="loading">
					<img v-if="trayInfo.executing_craft" :src="ExecutingSvg" />
					<img v-else :src="ReadySvg" />
				</div>
				<div class="tray_craft" :style="{ color: !trayInfo.executing_craft ? readyColor : executingColor }">
					{{ trayInfo.craftInfo.name }}
				</div>
				<div class="tray_exce" :style="{ color: !trayInfo.executing_craft ? readyColor : executingColor }">
					{{ !trayInfo.executing_craft ? "工艺等待执行" : "工艺执行完毕" }}
				</div>
			</div>
		</section>

		<section class="heat_footer">
			<div class="heat_temperature" @click="setTemperature">
				<template v-if="trayInfo?.id">
					<div class="target_temp">目标温度: {{ trayInfo.temperature }}℃</div>
					<div class="heating" :style="{ color: temperature_color }">
						{{ trayInfo.heatAearStatus?.isHeating ? "加热中" : "未加热" }}
					</div>
				</template>
				<template v-else>
					<div class="target_temp set_temp">设置目标温度</div>
				</template>
			</div>

			<div class="flex items-center py-4 justify-between px-2">
				<div class="temp_text">{{ trayInfo.heatAearStatus?.temperature }}</div>
				<button
					:class="`btn-light text-sm px-4 text_choose ${trayInfo.isSelect ? 'text_color' : ''}`"
					@click.stop="onSelectTray">
					选择
				</button>
			</div>
		</section>

		<van-overlay v-if="tempVisible" :show="true">
			<div class="flex justify-center items-center h-full">
				<SetTemperature @cancel="tempVisible = false" :temperature="heatAreaTemperature" @confirm="onConfirm" />
			</div>
		</van-overlay>
		<!-- <OverlayModal :visible="tempVisible">
      <div class="set_temp_modal_content">
        <h3 class="set_temp_title">设定温度</h3>
        <section class="temp_label">
          <div class="text-xl">
            目标温度：<input
              type="number"
              v-model="heatAreaTemperature"
              class="temp_input"
              placeholder="请输入温度"
            />
          </div>
          <div class="text-xl temp_status flex">
            <div>到达温度后</div>
            <van-radio-group
              v-model="trayTempType"
              shape="square"
              class="flex temp_radio"
            >
              <van-radio name="1">保持温度</van-radio>
              <van-radio name="2">停止加热</van-radio>
            </van-radio-group>
          </div>
        </section>

        <footer
          class="h-[5.625rem] flex justify-center items-center text-sm font-medium gap-x-5"
        >
          <button class="btn-dark px-10 py-2 w-15" @click="onConfirm">
            确定
          </button>
          <button class="btn-light px-10 py-2" @click="tempVisible = false">
            取消
          </button>
        </footer>
      </div>
    </OverlayModal> -->
		<!--选择工艺-->
		<OverlayModal :visible="craftVisible">
			<CraftList @changeVisible="changeVisible" @selectedCraft="onHandleSelectedCraft"></CraftList>
		</OverlayModal>
	</div>
</template>

<script lang="ts" setup>
import { ref, watch, onMounted, getCurrentInstance } from "vue";
import OverlayModal from "@/components/OverlayModal.vue";
import CraftList from "./CraftList.vue";
import ReadySvg from "@/assets/ready.svg";
import ExecutingSvg from "@/assets/executing.svg";
import SetTemperature from "./SetTemperature.vue";

const tubeList = ref<any>([]);
const props = defineProps({
	heatInfo: Object,
	tubeIndex: Number,
});
const emits = defineEmits(["onSelectedTray", "onSetHeatAreaTemp", "onSelectCraft"]);

const selectedBackgroundColor = "#189952";
const readyColor = "#EE8223";
const executingColor = "#14A656";
onMounted(() => {
  for(let i = 0 ; i<16; i++){
    tubeList.value.push({
      backgroudColor:'',
      id:i+1
    })
  }
  reset(props.heatInfo)
});

const craftVisible = ref(false);

//设置温度
const trayTempType = ref(false);
const tempVisible = ref(false);
//加热区信息
let trayInfo = ref<any>(props.heatInfo || {});

let temperature_color = ref('#1677FF')
watch(()=>props.heatInfo, (newVal:any) =>{
  if(newVal.heatAearStatus.isHeating){
    temperature_color.value = '#FE0A0A'  
  }else{
    temperature_color.value = '#1677FF'  
  }
  reset(newVal)
})
const reset = (heatInfo:any) => {
  let heatAreaData = {...heatInfo}
  if(heatAreaData.heatAearStatus?.trayStatus){
    if(heatAreaData.tubeList && heatAreaData.tubeList.length){
      heatAreaData.tubeList.forEach((item:any) => {
        item.backgroudColor = selectedBackgroundColor
        item.isSelected = true;
      })
    }else{
      tubeList.value.forEach((item:any) => {
        item.backgroudColor = selectedBackgroundColor
        item.isSelected = true;
      })
      heatAreaData.tubeList = tubeList.value
    }
  }else{
    tubeList.value.forEach((item:any) => {
        item.backgroudColor = ''
        item.isSelected = true;
      })
  }
  trayInfo.value = heatAreaData
}

const heatAreaTemperature = ref(trayInfo.value.temperature || "");
const currentIndex = ref();
const onSelectTray = () => {
	if (currentIndex.value !== props.tubeIndex) {
		trayInfo.value.isSelect = true;
	} else {
		trayInfo.value.isSelect = !trayInfo.value.isSelect;
	}
	currentIndex.value = props.tubeIndex;
	emits("onSelectedTray", trayInfo.value, "isClick");
};

const changeVisible = () => {
	craftVisible.value = false;
};

const setTemperature = () => {
	heatAreaTemperature.value = +trayInfo.value.temperature;
	tempVisible.value = true;
};

const onConfirm = (temperature: number) => {
	trayInfo.value.temperature = temperature;
	tempVisible.value = false;
	//将设置的温度传给加热区
	emits("onSetHeatAreaTemp", trayInfo.value);
};

//试管操作
const onHandleTube = (tubeInfo: any, index: number) => {
	if (!trayInfo.value.heatAearStatus.trayStatus) return;
	//设置UI选中颜色
	if (trayInfo.value.heatAearStatus.trayStatus && tubeInfo.isSelected) {
		tubeInfo.backgroudColor = "";
	} else {
		tubeInfo.backgroudColor = selectedBackgroundColor;
	}
	tubeInfo.isSelected = !tubeInfo.isSelected;
};

//选择的工艺
const onHandleSelectedCraft = (craftData: any) => {
	emits("onSelectCraft", craftData);
	changeVisible();
};
</script>

<style lang="scss" scoped>
@use "@/assets/style/mixin.scss" as *;
.heat_main {
	border: 1px solid #e9f3ff;
	width: 11.5rem;
	height: 18.125rem;
	border-radius: 10px;
	background: #e9f3ff;
}
.heat_pos_text {
	display: flex;
	height: 1.75rem;
	padding-left: 0.875rem;
	padding-right: 0.75rem;
	.pos_text {
		font-size: 0.8125rem;
		font-weight: 500;
		line-height: normal;
		display: flex;
		align-items: center;
		color: #4d6882;
	}

	.pos_state {
		margin-left: 50%;
	}
}
.heat_pos {
	width: 10.375rem;
	height: 10.375rem;
	display: flex;
	justify-content: center;
	flex-wrap: wrap;
	margin-left: 5px;
	gap: 0.625rem;
	flex-direction: row;
	border: 2px solid #7592a8;
	padding-top: 0.5rem;
	border-radius: 0.5rem;
}
.inner-circle {
	border-radius: 50%;
	width: 1.625rem;
	height: 1.625rem;
	background-color: rgb(212, 212, 212);
}
.heat_footer {
	margin-top: 10px;
	margin-left: 5px;
	.heat_temperature {
		height: 1.625rem;
		width: 10rem;
		background: #ffffff;
		box-shadow: inset 2px 2px 4px 0px rgba(204, 204, 204, 0.3);
		border-radius: 5px;
		display: flex;
		align-items: center;
		justify-content: center;
		.target_temp {
			color: #384d5d;
			font-size: 0.75rem;
		}

		.heating {
			color: #fe0a0a;
			font-size: 0.875rem;
			margin-left: 1rem;
		}
	}

	.temp_text {
		font-size: 1.125rem;
		font-weight: bold;
		color: #4d6882;
	}
}

.heat_overlay {
	border: 1px solid #e9f3ff;
	width: 9.375rem;
	height: 15.5rem;
	border-radius: 20px;
	margin-top: 3.125rem;
	position: absolute;
	background: #d3d3d3;
	margin-top: -10.375rem;
	opacity: 0.8;

	.heat_loading {
		margin: 3.875rem;
	}
}

.formula_picker {
	width: 25rem;
	margin: 20% 30%;
}

.set_temp_modal {
	display: flex;
	justify-content: center;
	align-items: center;
}

.set_temp_modal_content {
	width: 28.5rem;
	height: 16.5rem;
	background: #ffffff;

	.temp_label {
		margin-left: 2.875rem;
		margin-top: 1rem;
	}

	.set_temp_title {
		height: 1.875rem;
		width: 5.25rem;
		margin-top: 1.875rem;
		margin-left: 1.25rem;
		font-size: 1.25rem;
		font-weight: 500;
		color: #40474e;
	}
}

.temp_input {
	border: 1px solid #dadada;
	font-size: 1.25rem;
	width: 10rem;
}

.temp_status {
	margin-top: 1.5rem;
	display: flex;
	gap: 20px;
}

.temp_radio {
	font-size: 1.25rem;
	display: flex;
	gap: 20px;
}

:deep(.van-radio__icon) {
	i {
		font-size: 30px;
		margin-top: -10px;
	}
}
.text_choose {
	position: relative;
	// z-index: 111;
}
.text_color {
	background: #6893ff;
	color: #ffffff;
}
.craft_executing_modal {
	position: relative;
	width: 11.2rem;
	height: 17.8rem;
	padding-top: 0.5rem;
	border-radius: 0.5rem;
	opacity: 0.8;
	z-index: 99;
	margin-top: -11.5rem;
	.loading {
		margin-top: 4rem;
		display: flex;
		justify-content: center;
	}
	.tray_craft {
		font-size: 0.75rem;
		margin-top: 0.5rem;
		font-weight: bold;
		display: flex;
		justify-content: center;
		color: #ee8223;
	}

	.tray_exce {
		font-size: 1rem;
		font-weight: bold;
		color: #ee8223;
		display: flex;
		justify-content: center;
	}
}
</style>
