import moment from "moment";
import store from "@/store";
import inspectApi from "@/api/inspect.js";

function createInspectionCode() {
  return `JFXJ${moment().format("yyyyMMDDHHmmss")}${
    Math.floor(Math.random() * 900) + 100
  }`;
}

// 将现有机房巡检数据转换为SQL数据所需要格式
export function dataToSql(data) {
  let synFlag = 0;
  if (data.synchronization === 1) {
    synFlag = 1;
  } else {
    if (data.synchronization == 2 || !data.signImg) {
      synFlag = 2;
    } else {
      synFlag = 0;
    }
  }
  const send = {
    inspectionType: data.inspectionType,
    inspectionCode: data.inspectionCode || createInspectionCode(), // 获取最近的数据可能存在没有code的情况
    recordName: `${moment().format("yyyyMMDD")}-机房巡检`,
    inspectionTime: `${new Date().getTime()}`,
    isException: data.isException, // 是否异常：0 否 1 是
    userId: store.state.now_user.userId,
    userName: store.state.now_user.user,
    synFlag: synFlag, // 0.未同步，1.已同步 2.编辑
    signImg: data.signImg || "",
    createBy: store.state.now_user.userId,
    createTime: data.id ? data.createTime : `${new Date().getTime()}`,
    updateTime: `${new Date().getTime()}`,
    inspectionData: data.originData,
  };
  console.log("dataToSql", send);
  return send;
}

export function sqlToData(sqlData) {
  let isSubmit;
  let synchronization;

  if (sqlData.synFlag === 0) {
    isSubmit = 0;
    synchronization = 0;
  } else {
    isSubmit = 1;
    synchronization = sqlData.synFlag;
  }

  // 解析 inspectionData，确保其为 JSON 格式
  const originData = JSON.parse(sqlData.inspectionData || "[]");

  // 获取已经巡检过的项目（status 为 1 或 2）
  const inspectedItems = originData.filter(
    (item) => item.status === 1 || item.status === 2
  );

  // 已巡检的数量
  const inspectionNumber = inspectedItems.length;

  // 判断是否全部填写完成（每个 item 的 isSubmit 都为 1）
  const allIsSubmitOne = originData.every((item) => item.isSubmit === 1);

  // 还原 isException 的逻辑
  let isException = sqlData.isException;
  if (isSubmit === 0 && isException === 2) {
    isException = 0; // 如果 isSubmit 为 0 且 isException 为 2，则还原为 0
  }

  // 构造返回对象
  const ret = {
    id: sqlData.id || null, // ID 可能为空
    inspectionType: sqlData.inspectionType || "", // 巡检类型
    inspectionCode: sqlData.inspectionCode || "", // 巡检编码
    isException, // 是否异常
    signImg: sqlData.signImg || "", // 签名图片路径
    createTime: sqlData.createTime || `${new Date().getTime()}`, // 创建时间，默认为当前时间戳
    isSubmit, // 是否提交
    synchronization, // 同步状态
    originData, // 原始数据
    inspectionNumber, // 已巡检数量
    allIsSubmitOne, // 是否全部填写完成
    isSign: !!sqlData.signImg, // 是否有签名
  };

  return ret;
}

export function getHistoryData(inspectionType=1) {
  return new Promise((resolve, reject) => {
    inspectApi.selectLastData(store.state.now_user.userId, inspectionType).then((history) => {
      if (history && history.length) {
        const detailsInfo = sqlToData(history[0]);
        // 处理历史数据（选项、文案、照片；异常项-不调出文案及照片）
        setHistoryData(detailsInfo);
        resolve(detailsInfo);
      } else {
        resolve(null);
      }
    });
  });
}

function setHistoryData(data) {
  data.signImg = "";
  data.originData.forEach((item) => {
    // 如果该机房有异常项，则不调出文案及照片
    if (item.status == 2) {
      // 外面的异常标识
      item.isSubmit = 0;
      Object.keys(item.details).forEach((key) => {
        const current = item.details[key];
        if (current.status) {
          // 内部的异常标识
          current.detail.forEach((detail) => {
            // 表单项的异常
            if (detail.inspectionResult == 1) {
              detail.conclusion = "";
              detail.photos = [];
            }
          });
        }
      });
    }
  });
}
