<template>
  <el-dialog
    v-model="dialogVisible"
    top="6vh"
    :width="width"
    :title="props.title"
    @open="openAct"
    @closed="closedAct"
    :z-index="20"
    destroy-on-close
  >
    <el-scrollbar height="650px">
      <PatientInfoComp
        :patientInfo="props.patientInfo"
        :registrationType="props.registrationType"
        :initOptions="initOptions"
        :noFile="noFile"
        ref="patientInfoRef"
        @onChangFeeType="onChangFeeType"
      />
      <!-- <PatientRelationList
        class="relationList"
        :patCode="patientInfo.code"
        ref="PatientRelationListRef"
      /> -->
      <!--联系人组件  -->
      <RegisterForm
        :code="code"
        ref="RegisterFormRef"
        :patientInfo="patientApiInfo"
        :initOptions="initOptions"
        :alreadyEdit="alreadyEdit"
        :inHospitalInfo="inHospitalInfo"
        :noFile="noFile"
      />
    </el-scrollbar>
    <template v-slot:footer>
      <div class="advance-container">
        <el-space>
          <div>缴费预交金</div>
          <el-input
            style="width: 142px"
            placeholder="请输入"
            v-model="advance"
            @input="handleAdvanceInput"
            :formatter="handleAdvanceFormatter"
            :parser="handleAdvanceParser"
          ></el-input>
          <div
            class="feeType"
            :class="currentFeeType == typeitem.type ? 'activeFeeType' : ''"
            v-for="typeitem in feeTypeOptions"
            :key="typeitem.type"
            @click="currentFeeType = typeitem.type"
          >
            <svg-icon
              :icon-class="typeitem.type"
              :color="currentFeeType == typeitem.type ? '#13C0B3' : '#666666'"
              height="18px"
              width="18px"
              style="margin-right: 4px"
            />
            {{ typeitem.label }}
          </div>
        </el-space>
      </div>
      <el-button size="fixed" class="margin-left-auto" @click="cancelAct">取消 </el-button>
      <el-button size="fixed" type="primary" @click="handleSubmit">登记</el-button>
      <!-- <hip-button size="fixed" type="primary" @click="supplementMi">医保登记</hip-button> -->
      <!-- <AdvancePayment
        v-model="advancePaymentVisible"
        @submitOk="advancePaymentSubmitOk"
        :money="advance"3
      /> -->
    </template>
  </el-dialog>
</template>
<script setup>
const { proxy } = getCurrentInstance();
import {ElMessage, ElMessageBox} from 'element-plus';
import PatientInfoComp from './patientInfo.vue';
import RegisterForm from './registerForm.vue';
import {getInit, noFilesRegister, registerInHospital} from './api';

const emits = defineEmits(['okAct', 'cancelAct']);

const props = defineProps({
  title: '',
  registrationType: {
    type: [String, Boolean, Number], // 根据实际类型调整
    default: null, // 或者 false、'' 等
  },
  patientInfo: {
    type: Object,
  },
  inHospitalInfo: {
    type: Object,
  },
  alreadyEdit: {
    type: Boolean,
    default: false,
  },
  noFile: {
    type: Boolean,
    default: false,
  },
});

watch(
  () => props.registrationType,
  (newValue) => {
    console.log('registrationType changed:', newValue);
  },
  { immediate: true }
);

const dialogVisible = defineModel('dialogVisible', {
  type: Boolean,
  default: false,
});
const code = defineModel('code');
const width = '1128px';
const patientApiInfo = ref({});
const initOptions = ref({});

/* 取消 */
const cancelAct = () => {
  emits('cancelAct');
};
const patientInfoRef = ref();

/* 预交金 */
const advancePaymentVisible = ref(false);
/* 保存 */
const handleSubmit = () => {
  let params = {};
  if (props.noFile) {
    RegisterFormRef.value.validateData(async () => {
      params.inHospitalInfo = RegisterFormRef.value.submitForm;
      params.patientInformation = patientInfoRef.value.getPatientForm();
      if (params.patientInformation.idCard) {
        // 验证身份证号长度是否为18位
        const idCard = params.patientInformation.idCard.toString();
        if (idCard.length === 18) {
          params.patientInformation.birthDate =
            idCard.substring(6, 10) +
            '-' +
            idCard.substring(10, 12) +
            '-' +
            idCard.substring(12, 14);
        }
      }
      console.log('params', params);
      params.inHospitalInfo.balanceAmount = advance.value;
      const performRegistration = () => {
        noFilesRegister(params).then((res) => {
          if (res.code == 200) {
            emits('okAct');
            ElMessage.success(res.msg);
            advancePaymentVisible.value = true;
          } else {
            ElMessage.error(res.msg);
          }
        });
      };
      if (advance.value == 0) {
        ElMessageBox.confirm('住院预交金额未填写，确认登记吗', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning',
        })
          .then(() => {
            performRegistration();
          })
          .catch(() => {});
      } else {
        performRegistration();
      }
    });
  } else {
    params.balanceAmount = advance.value;
    params.patientId = props.patientInfo.patientId;
    RegisterFormRef.value.validateData(async () => {
      params = { ...params, ...RegisterFormRef.value.submitForm };
      console.log('params', params);
      const performRegistration = () => {
        registerInHospital(params).then((res) => {
          if (res.code == 200) {
            emits('okAct');
            ElMessage.success(res.msg);
            advancePaymentVisible.value = true;
          } else {
            ElMessage.error(res.msg);
          }
        });
      };

      if (advance.value == 0) {
        ElMessageBox.confirm('住院预交金额未填写，确认登记吗', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning',
        })
          .then(() => {
            performRegistration();
          })
          .catch(() => {});
      } else {
        performRegistration();
      }
    });
  }
};

const openAct = () => {
  console.log(props.patientInfo, 'patientRegister.vue');
  console.log(props.inHospitalInfo, 'inHospitalInfo.vue');
  /* 初始化数据 */
  advance.value = props.inHospitalInfo.balanceAmount || 0;
  advancePaymentVisible.value = false;
  RegisterFormRef.value.init();
};
const closedAct = () => {
  dialogVisible.value = false;
  if (patientInfoRef.value?.isEditing) {
    patientInfoRef.value.isEditing = false;
  }
};

onMounted(() => {
  getInit().then((res) => {
    initOptions.value = res.data;
  });
});

/* 登记 */
const RegisterFormRef = ref();

const feeTypeOptions = reactive([
  {
    type: 'hipCash',
    label: '现金',
  },
  {
    type: 'hipAlipay',
    label: '支付宝',
  },
  {
    type: 'wechat',
    label: '微信',
  },
  {
    type: 'hipPayCard',
    label: '银行卡',
  },
]);
const advance = ref('0.00');
const currentFeeType = ref('hipCash');
/* 预交金录入框格式 */
const handleAdvanceInput = (value) => {
  if (value.length === 1 && value === '.') {
    value = '0.';
  } else {
    advance.value = value.replace(/[^\d.]/g, '').replace(/^(\d*\.\d{2}).*$/, '$1');
  }
};
const handleAdvanceFormatter = (value) => {
  return `¥ ${value}`;
};
const handleAdvanceParser = (value) => {
  return value.replace(/\$\s?|(,*)/g, '');
};
const medicalInsuranceVisible = ref(false);
const medicalInsuranceTitle = ref('');

/* 患者费别变更 */
const onChangFeeType = () => {
  medicalInsuranceTitle.value = '医保信息'; //医保信息、医保登记
  medicalInsuranceVisible.value = true;
};

/*  */
</script>
<style lang="scss" scoped>
.patientRegister-container {
  height: 700px;
  overflow-y: auto;
}

.advance-container {
  width: 660px;
  display: flex;

  .feeType {
    display: flex;
    align-items: center;
    height: 32px;
    padding: 0px 8px;
    color: #666666;
    border-radius: 4px;
    cursor: pointer;

    :deep(.svg-icon) {
      color: #666666;
    }
  }

  .activeFeeType {
    color: #13c0b3;
    background: rgba(19, 192, 179, 0.1);

    :deep(.svg-icon) {
      color: #13c0b3;
    }
  }
}
</style>
