<script setup lang="ts">
import { onMounted, ref } from 'vue';
import { useVbenDrawer, useVbenForm } from '@vben/common-ui';
import { addHiddenDangerRegister } from '#/api/archive/HSSE/HSSE';
import { drawerFormSchema } from './config-data';

const emit = defineEmits<{
  reload: [];
}>();

// 响应式变量
const isUpdateRef = ref<boolean>(false);

// 初始化表单
const [Form, formApi] = useVbenForm({
  showDefaultActions: false,
  schema: drawerFormSchema(),
  labelWidth: 100,
});

// 初始化抽屉
const [Drawer, drawerApi] = useVbenDrawer({
  showFooter: true,
  async onOpenChange(isOpen) {
    if (!isOpen) {
      return;
    }
    await handleDrawerOpen();
  },

  async onConfirm() {
    await handleFormSubmit();
  },

  onClosed() {
    formApi.resetForm();
  },
});

/**
 * 处理抽屉打开逻辑
 */
async function handleDrawerOpen() {
  try {
    drawerApi.drawerLoading(true);
    const { id, isUpdate } = drawerApi.getData();
    isUpdateRef.value = isUpdate;
    
    // 设置默认值
    await formApi.setValues({
      isTask: 1,
    });
  } catch (error) {
    console.error('打开抽屉失败:', error);
  } finally {
    drawerApi.drawerLoading(false);
  }
}

/**
 * 处理表单提交
 */
async function handleFormSubmit() {
  try {
    // 验证表单
    const { valid } = await formApi.validate();
    if (!valid) {
      return;
    }
    
    // 获取表单数据
    const data = await formApi.getValues();
    console.log('表单数据:', data);
    
    // 处理数据
    const processedData = processFormData(data);
    
    // 提交请求
    await addHiddenDangerRegister(processedData);
    
    // 触发重载事件并关闭抽屉
    emit('reload');
    drawerApi.close();
  } catch (error) {
    console.error('保存隐患台账失败:', error);
  }
}

/**
 * 处理表单数据
 * @param data 表单数据
 * @returns 处理后的数据
 */
function processFormData(data: any) {
  // 处理图片数据
  let problemImages = data.problemImages || '';
   data.ccTo = data.ccTo.join(',');
  
  // 如果有 problemImagesUrl，优先使用其中的 name 构建 problemImages
  if (Array.isArray(data.problemImagesUrl) && data.problemImagesUrl.length > 0) {
    // 检查是否有上传响应数据
    if (data.problemImagesUrl[0].response) {
      problemImages = data.problemImagesUrl
        .map((item: any) => item.response.data.fileName)
        .join(',');
    } else if (data.problemImagesUrl[0].name) {
      // 检查是否有 name 属性
      problemImages = data.problemImagesUrl
        .map((item: any) => item.name)
        .join(',');
    }
  }
  
  // 构建返回数据，排除 problemImagesUrl 字段
  const { problemImagesUrl, ...restData } = data;
  
  return {
    ...restData,
    problemImages: problemImages || '',
  };
}

// 初始化组件
onMounted(() => {
  // 组件挂载时的初始化逻辑
});
</script>
<template>
  <Drawer :title="isUpdateRef ? '编辑隐患台账' : '新增隐患台账'">
    <Form />
  </Drawer>
</template>
