<script setup lang="ts">
import { ref, reactive } from "vue";
import { ElMessage } from "element-plus";
import { useRenderIcon } from "@/components/ReIcon/src/hooks";
import { addSmartCabinet } from "@/api/cabinet/smart-cabinet";
import Confirm from "@iconify-icons/ep/check";
import type { FormRules } from 'element-plus';
import { CabinetImgMap } from "@/utils/cabinetImgMap";

export interface FormDTO {
  cabinetName: string;
  cabinetType: number;
  templateNo: string;
  lockControlNo: number;
  location: number;
}

const props = defineProps({
  visible: {
    type: Boolean,
    default: false
  }
});

const emit = defineEmits(["update:visible", "refresh"]);

const formRef = ref();
const formData = reactive<FormDTO>({
  cabinetName: "",
  cabinetType: 1,
  templateNo: "",
  lockControlNo: 0,
  location: 0
});

const rules = reactive<FormRules>({
  cabinetName: [{ required: true, message: "柜体名称必填", trigger: "blur" }],
  cabinetType: [{ required: true, message: "请选择柜体类型", trigger: "change" }],
  templateNo: [{ required: true, message: "请选择模板编号", trigger: "change" }],
  lockControlNo: [
    { required: true, message: "锁控板序号", trigger: "blur" }
  ],
  location: [
    { required: true, message: "位置信息必填", trigger: "blur" },
    { type: 'number', min: 0, message: '位置编号不能为负数', trigger: 'blur' }
  ]
});

const handleConfirm = async () => {
  try {
    await formRef.value.validate();
    await addSmartCabinet(formData);
    ElMessage.success("新增成功");
    emit("refresh");
    closeDialog();
  } catch (error) {
    console.error("表单提交失败", error);
  }
};

const closeDialog = () => {
  formRef.value.resetFields();
  emit("update:visible", false);
};

const templateOptions = Object.entries(CabinetImgMap).map(([value, item]) => ({
  label: item.name,
  value
}));
</script>

<template>
  <el-dialog title="新增智能柜" :model-value="visible" width="600px" @close="closeDialog">
    <el-form ref="formRef" :model="formData" :rules="rules" label-width="100px">
      <el-form-item label="柜体名称" prop="cabinetName">
        <el-input v-model="formData.cabinetName" placeholder="请输入柜体名称" />
      </el-form-item>

      <el-form-item label="柜体类型" prop="cabinetType">
        <el-select v-model="formData.cabinetType" placeholder="请选择类型">
          <el-option label="主柜" :value="0" />
          <el-option label="副柜" :value="1" />
        </el-select>
      </el-form-item>

      <el-form-item label="模板编号" prop="templateNo">
        <el-select v-model="formData.templateNo" placeholder="请选择模板编号">
          <el-option v-for="option in templateOptions" :key="option.value" :label="option.label"
            :value="option.value" />
        </el-select>
      </el-form-item>
    </el-form>

    <template #footer>
      <el-button @click="closeDialog">取消</el-button>
      <el-button type="primary" :icon="useRenderIcon(Confirm)" @click="handleConfirm">
        确认
      </el-button>
    </template>
  </el-dialog>
</template>