<template>
  <div class="eibs">
    <c-col :span="24" style="margin-top: 20px">
      <c-col :span="12" style="padding-right: 20px">
        <c-col :span="24">
          <c-fullbox>
            <el-form-item label="Special Payment Conditions for Beneficiary(49M)" prop="lidgrp.blk.spcben">
              <c-mul-row-input
                type="textarea"
                v-model="model.lidgrp.blk.spcben"
                :rows="800"
                :cols="65"
                :autosize="{ minRows: 14, maxRows: 14 }"
                show-word-limit
                :charmod="3"
                @change="handleSpcbenChanged"
                :disabled="isSpcbenDisabled"
                placeholder="请输入受益人特殊付款条款"></c-mul-row-input>
            </el-form-item>
          </c-fullbox>
        </c-col>
        <c-col :span="24">
          <c-ptap-commons
            :cols="65"
            :rows="800"
            :minRows="12"
            :maxRows="12"
            :model="model"
            :disabledButton="isUsrblkDisabled"
            :isRules="false"
            :extCodes="['litamep', 'spcbenamep']"
            lastModel="spcben"
            :charmod="3"
            title="Adding/Deleting Text in Current Amendment">
          </c-ptap-commons>
        </c-col>
      </c-col>
      <c-col :span="12" style="padding-left: 20px">
        <c-col :span="24">
          <c-fullbox>
            <el-form-item label="Historic Overview" prop="lidgrp.blk.spcbename">
              <c-mul-row-input
                disabled
                type="textarea"
                :rows="800"
                :cols="65"
                :autosize="{ minRows: 14, maxRows: 14 }"
                v-model="model.lidgrp.blk.spcbename"
                show-word-limit
                placeholder="历史修改信息"></c-mul-row-input>
            </el-form-item>
          </c-fullbox>
        </c-col>
        <c-col :span="24">
          <c-col :span="24" class="">
            <el-form-item label=" " prop="litamep.spcbenamep.modflg" label-width="180px" style="float: left">
              <c-checkbox
                v-model="model.litamep.spcbenamep.modflg"
                class="checkbox-left"
                true-label="X"
                false-label=""
                :disabled="this.model.litamep.spcbenamep.modmanflg == 'X'"
                @change="onModflgChange"
                >Modify Text to Replace</c-checkbox
              >
            </el-form-item>
          </c-col>
          <c-col :span="24" class="">
            <el-form-item label=" " prop="litamep.spcbenamep.modmanflg" label-width="180px" style="float: left">
              <c-checkbox
                v-model="model.litamep.spcbenamep.modmanflg"
                class="checkbox-left"
                true-label="X"
                false-label=""
                :disabled="this.model.litamep.spcbenamep.modflg == 'X'"
                @change="onModmanflgChange"
                >Modify Text Internally</c-checkbox
              >
            </el-form-item>
          </c-col>
        </c-col>
        <c-col :span="24">
          <el-form-item label-width="160px" style="float: left">
            <text-diff
              :leftText="model.oldlidgrp.blk.spcben"
              :rightText="model.lidgrp.blk.spcben"
              :isShowScale="false"
              :disabled="model.lidgrp.blk.spcben === model.oldlidgrp.blk.spcben" />
          </el-form-item>
        </c-col>
        <c-col :span="24">
          <el-form-item label-width="180px" style="float: left">
            <c-button
              type="primary"
              @click="onAddClick"
              :disabled="this.model.litamep.spcbenamep.spcben == null || this.model.litamep.spcbenamep.spcben == ''">
              Add
            </c-button>
          </el-form-item>
        </c-col>
        <c-col :span="24">
          <el-form-item label-width="180px" style="float: left">
            <c-button
              type="primary"
              @click="onDeleteClick"
              :disabled="this.model.litamep.spcbenamep.spcben == null || this.model.litamep.spcbenamep.spcben == ''">
              Delete
            </c-button>
          </el-form-item>
        </c-col>
      </c-col>
    </c-col>
  </div>
</template>
<script>
import event from "../event";
import moment from "moment";
import commonDepend from "~/mixin/commonDepend";
import TextDiff from "~/components/business/TextDiff";
export default {
  components: { TextDiff },
  inject: ["root"],
  props: ["model", "codes"],
  mixins: [event, commonDepend],
  data() {
    return {
      isSpcbenDisabled: true,
      isUsrblkDisabled: false,
      tempLcrben: "",
    };
  },
  methods: {
    onAddClick() {
      if (this.model.litamep.spcbenamep.spcben != null && this.model.litamep.spcbenamep.spcben != "") {
        if (this.model.lidgrp.blk.spcben === "") {
          this.model.lidgrp.blk.spcben = this.model.lidgrp.blk.spcben + this.model.litamep.spcbenamep.spcben;
        } else {
          this.model.lidgrp.blk.spcben = this.model.lidgrp.blk.spcben + "\n" + this.model.litamep.spcbenamep.spcben;
        }

        this.model.lidgrp.blk.spcbename =
          this.model.lidgrp.blk.spcbename +
          "\n" +
          "*** Amendment " +
          this.model.litamep.amenbr +
          " Date:" +
          moment(new Date()).format("MM/DD/YY") +
          ":" +
          "\n" +
          "/ADD/" +
          "\n" +
          this.model.litamep.spcbenamep.spcben +
          "\n";

        //设置spcben被修改过
        this.setSpcbenModified();
        if (this.model.benAddDelRep === "") {
          this.model.benAddDelRep = "/ADD/\n" + this.model.litamep.spcbenamep.spcben;
        } else {
          this.model.benAddDelRep = this.model.benAddDelRep + "\n/ADD/\n" + this.model.litamep.spcbenamep.spcben;
        }
        this.model.litamep.spcbenamep.spcben = "";
      }
    },
    onDeleteClick() {
      if (this.model.lidgrp.blk.spcben != null && this.model.lidgrp.blk.spcben != "") {
        let spcben = this.model.lidgrp.blk.spcben;
        let realMatchText = this.specialCharactersProcess(this.model.litamep.spcbenamep.spcben);
        // 使用正则表达式,匹配usrblk文本框中的内容
        // 正则表达式,开启匹配多行 flag: 'g',开启多行模式 flag:'m'
        let usrblkRegExp = new RegExp("^" + realMatchText + "$", "gm");
        let matchArray = spcben.match(usrblkRegExp);
        // 未找到匹配字符串
        if (matchArray == null || matchArray.length <= 0) {
          this.$alert("Text to delete not found in original text and thus cannot be deleted", "提示", {
            confirmButtonText: "OK",
          });
          return;
        }

        // 匹配到多个 字符串
        if (matchArray != null && matchArray.length > 1) {
          this.$alert(
            "Text to delete found more than once in original text and thus cannot be deleted. \n" +
              "Please extend portion to delete or use modify to replace.",
            "提示",
            {
              confirmButtonText: "OK",
            }
          );
          return;
        }

        // 匹配到正好1个字符串
        if (matchArray != null && matchArray.length == 1) {
          this.model.lidgrp.blk.spcben = this.model.lidgrp.blk.spcben.replace("\n" + realMatchText, "");
          this.model.lidgrp.blk.spcben = this.model.lidgrp.blk.spcben.replace(realMatchText + "\n", "");
          this.model.lidgrp.blk.spcben = this.model.lidgrp.blk.spcben.replace(realMatchText, "");

          this.model.lidgrp.blk.spcbename =
            this.model.lidgrp.blk.spcbename +
            "\n" +
            "*** Amendment " +
            this.model.litamep.amenbr +
            " Date:" +
            moment(new Date()).format("MM/DD/YY") +
            ":" +
            "\n" +
            "/DEL/" +
            "\n" +
            this.model.litamep.spcbenamep.spcben +
            "\n";

          //设置spcben被修改过
          this.setSpcbenModified();
          if (this.model.benAddDelRep === "") {
            this.model.benAddDelRep = "/DELETE/\n" + this.model.litamep.spcbenamep.spcben;
          } else {
            this.model.benAddDelRep = this.model.benAddDelRep + "\n/DELETE/\n" + this.model.litamep.spcbenamep.spcben;
          }
          this.model.litamep.spcbenamep.spcben = "";
          return;
        }
      }
    },
    onModflgChange() {
      if (this.model.litamep.spcbenamep.modflg == "X") {
        // 如果blk.spcben的值被修改过,则给出提示
        if (this.isSpcbenModified()) {
          this.$confirm(
            "Do you really want to change to modification of the complete text?\n" +
              "The information about single added and deleted lines will be lost.",
            "提示",
            {
              confirmButtonText: "OK",
              cancelButtonText: "Cancel",
              type: "warning",
              showClose: false,
            }
          )
            .then(() => {
              //yes的执行在这里写
              this.model.litamep.spcbenamep.modflg = "X";

              this.isSpcbenDisabled = false;
              this.isUsrblkDisabled = true;
              this.model.litamep.spcbenamep.spcben = "";
              this.model.lidgrp.blk.spcben = this.model.oldlidgrp.blk.spcben;
              // 值恢复,删除spcben的modify记录
              this.resetSpcbenNotModified();
              // 清空add/delete内容
              this.model.benAddDelRep = "";
            })
            .catch(() => {
              //No的功能在这里写
              this.model.litamep.spcbenamep.modflg = "";

              this.isSpcbenDisabled = true;
              this.isUsrblkDisabled = false;
            });
        } else {
          this.isSpcbenDisabled = false;
          this.isUsrblkDisabled = true;
        }
      } else {
        // 如果blk.spcben的值被修改过,则给出reset提示
        if (this.isSpcbenModified()) {
          this.$confirm("Do you really want to reset your manual modifications?", "提示", {
            confirmButtonText: "OK",
            cancelButtonText: "Cancel",
            type: "warning",
            showClose: false,
          })
            .then(() => {
              //yes的执行在这里写,执行reset,将blk.spcben恢复到原值
              this.model.litamep.spcbenamep.modflg = "";

              this.isSpcbenDisabled = true;
              this.isUsrblkDisabled = false;
              this.model.litamep.spcbenamep.spcben = "";
              this.model.lidgrp.blk.spcben = this.model.oldlidgrp.blk.spcben;
              // 值恢复,删除spcben的modify记录
              this.resetSpcbenNotModified();
            })
            .catch(() => {
              //No的功能在这里写,不执行rest,将modflg的继续选中
              this.model.litamep.spcbenamep.modflg = "X";
            });
        } else {
          this.isSpcbenDisabled = true;
          this.isUsrblkDisabled = false;
        }
      }
    },
    onModmanflgChange() {
      if (this.model.litamep.spcbenamep.modmanflg == "X") {
        this.isSpcbenDisabled = false;
        this.isUsrblkDisabled = true;
        this.model.litamep.spcbenamep.spcben = "";
        this.tempLcrben = this.model.lidgrp.blk.spcben;
      } else {
        if (this.tempLcrben !== this.model.lidgrp.blk.spcben) {
          // 如果有修改过,则需提示
          this.$confirm("Do you really want to reset your manual modifications?", "提示", {
            confirmButtonText: "OK",
            cancelButtonText: "Cancel",
            type: "warning",
            showClose: false,
          })
            .then(() => {
              // 确认取消勾选
              this.isSpcbenDisabled = true;
              this.isUsrblkDisabled = false;
              // 将blk的值还原成手动修改前的值
              this.model.lidgrp.blk.spcben = this.tempLcrben;
            })
            .catch(() => {
              // 不取消勾选
              this.model.litamep.spcbenamep.modmanflg = "X";
            });
        } else {
          // 没做过手动修改
          this.isSpcbenDisabled = true;
          this.isUsrblkDisabled = false;
        }
      }
    },

    setSpcbenModified() {
      this.customAddModify(this.model.lidgrp.blk, "spcben");
    },

    resetSpcbenNotModified() {
      this.customRemoveModify(this.model.lidgrp.blk, "spcben");
    },

    isSpcbenModified() {
      if (!this.model.lidgrp.blk.modifySet) {
        return false;
      } else {
        if (this.model.lidgrp.blk.modifySet.includes("spcben")) {
          return true;
        }
      }
      return false;
    },

    handleSpcbenChanged() {
      // 设置修改标记
      this.setSpcbenModified();

      let changedText =
        "*** Amendment " + this.model.litamep.amenbr + " Date:" + moment(new Date()).format("MM/DD/YY") + ":" + "\n";

      if (this.model.litamep.spcbenamep.modflg === "X") {
        changedText = changedText + "/REPALL/" + "\n";
      } else {
        changedText = changedText + "Special Payment Conditons for Beneficiary changed as follows:";
      }

      changedText = changedText + this.model.lidgrp.blk.spcben + "\n";

      this.model.lidgrp.blk.spcbename = this.model.lidgrp.blk.spcbename + "\n" + changedText;
    },
  },
};
</script>
<style></style>