import {
  observable,
  action
} from 'mobx';
import * as mobx from 'mobx';
import * as Api from '../apis/job'; // 引入API接口文件
import {
  WeaForm
} from 'comsMobx';
import {
  WeaTableNew
} from 'comsMobx';
import {
  Modal,
  message,
} from 'antd'
import {
  i18n
} from '../public/i18n';
import {
  findIndex
} from 'lodash';
import {
  WeaLocaleProvider
} from 'ecCom'

const toJS = mobx.toJS;
const {
  TableStore
} = WeaTableNew;
const getLabel = WeaLocaleProvider.getLabel;

export class JobStore {
  @observable tableStore = new TableStore();
  @observable topMenu = []
  @observable rightMenu = [];
  @observable dataSource = [];
  @observable columns = [];
  @observable loading = true;
  @observable dialogLoading = true;
  @observable isEdit = true;
  @observable nEdialogTitle = '';
  @observable searchCondition = [];
  @observable condition = [];
  @observable copyCondition = [];
  @observable mergeCondition = [];
  @observable isPanelShow = false; //高级搜索面板
  @observable form = new WeaForm();
  @observable form1 = new WeaForm(); //新增主表表单
  @observable form2 = new WeaForm(); //复制表单 合并表单
  @observable jobTitleName = '';
  @observable conditionNum = 6;
  @observable ids = ''; //选择行id
  @observable id = ''; //页面跳转参数id
  @observable searchConditionLoading = true;
  @observable visible = false;
  @observable newVisible = false; //新增弹窗
  @observable jobId = '';
  @observable selectedRowKeys = [];
  @observable date = '';
  @observable init = true; //是否首次加载
  @observable total = '';
  @observable current = 1;
  @observable pageSize = 10;
  @observable sortParams = [];
  @observable defaultShowLeft = true;
  @observable companysId = 1
  @observable hasRight = '';
  @observable key = '';
  @observable key1 = '';
  @observable selectTreeNodeInfo;
  saveAndSetting = false;

  @observable jobtitleVisible = false;

  @action initData() {
    this.getHasRight();
    this.getTableInfo();
    //this.refresh();
    // this.getCopyForm();
    // this.getMergeForm();
  }

  @action getTableInfo() {
    this.setLoading(true);
    let params = {
      ...this.selectTreeNodeInfo,
      current: this.current,
      pageSize: this.pageSize,
      sortParams: this.sortParams
    }
    if (this.isEmptyObject(this.form.getFormParams())) {
      params = {
        ...params,
        jobTitleName: this.jobTitleName,
      };
    } else {
      params = {
        ...params,
        ...this.form.getFormParams(),
      };
    }
    Api.getSearchList(params).then(response => {
      return response.json()
    }).then(res => {
      if (res.code === 200) {
        this.setHasRight(res.data.hasRight);
        res.data.pageInfo.columns && this.setColumns(res.data.pageInfo.columns);
        this.setTotal(res.data.pageInfo.total);
        res.data.pageInfo.list && this.setDataSource(res.data.pageInfo.list);
        this.setLoading(false);
        this.setInit(false);
      } else {
        message.warning(res.msg);
      }
    }).catch(error => {
      message.warning(error.msg);
    })
  }

  @action("leftTree事件") doSearch(params) {
    this.selectTreeNodeInfo = params;
    this.setCurrent(1);
    this.setPageSize(10);
    this.setInit(true);
    this.getTableInfo();
  }

  @action("联查人员") getHrmTable(id) {
    let params = {
      jobId: id
    }
    this.tableStore = new TableStore();
    Api.getHrmListByJobId(params).then(res => {
      if (res.code === 200) {
        res.data.datas && this.tableStore.getDatas(res.data.datas, 1);
      } else {
        message.warning(res.msg);
      }
    }, error => {
      message.warning(error.msg);
    })
  }

  @action("删除") delete() {
    let params = {
      ids: this.ids
    };
    Api.deleteTableData(params).then(response => {
      return response.json()
    }).then(data => {
      if (data.code === 200) {
        message.success(i18n.message.deleteSuccess());
        this.setSelectedRowKeys([]);
        this.getTableInfo();
      } else {
        message.warning(data.msg);
      }
    }).catch(error => {
      message.warning(error.msg);
    })
  }

  @action("刷新") refresh() {
    Api.refresh().then(res => {
      if (res.code === 200) {
        this.getTableInfo();
        message.success(getLabel(547202,'数据刷新成功'));
      } else {
        message.warning(res.msg);
      }
    }, error => {
      message.warning(error.msg);
    })
  }

  updateForbiddenTag(checked, id) {
    let params = {
      forbiddenTag: checked,
      id: id
    }
    Api.updateForbiddenTag(params).then(response => {
      return response.json()
    }).then(data => {
      if (data.code === 200) {
        message.success(data.msg, 1);
        this.getTableInfo();
      } else {
        message.warning(data.msg);
      }
    }).catch(error => {
      message.warning(error.msg);
    })
  }

  getSearchCondition() {
    this.setScLoadingStatus(true);
    Api.getAdvanceSearchCondition().then(res => {
      if (res.code === 200) {
        this.setScLoadingStatus(false);
        res.data.conditions && this.setSearchCondition(res.data.conditions);
        res.data.conditions && this.form.initFormFields(res.data.conditions);
      } else {
        message.warning(res.msg);
      }
    }, error => {
      message.warning(error.msg);
    })
  }


  getJobForm() {
    this.setDialogLoadingStatus(true);
    Api.getJobForm(this.selectTreeNodeInfo).then(res => {
      if (res.code === 200) {
        this.setDialogLoadingStatus(false);
        if(res.data.condition) {
          let condition = this.processCondition(res.data.condition)
          this.setCondition(condition);
          this.form1.initFormFields(condition);
        }
      } else {
        message.warning(res.msg);
      }
    }, error => {
      message.warning(error.msg);
    })
  }

  processCondition = (condition) => {
    condition.map(c => c.items.map(item => {
      if (item.domkey[0] === "ec_jobTitle") {
        item.otherParams = {
          addOnClick: () => {
           this.setJobtitleVisible(true);
          }
        }
      }
    }));
    return condition;
  }

  @action("复制表单") getCopyForm() {
    let params = {};
    Api.getCopyForm(params).then(res => {
      if (res.code === 200) {
        res.data && this.setCopyCondition(res.data);
      } else {
        message.warning(res.msg);
      }
    }, error => {
      message.warning(error.msg);
    })
  }

  @action("合并表单") getMergeForm() {
    Api.getMergeForm().then(res => {
      if (res.code === 200) {
        res.data && this.setMergeCondition(res.data);
      } else {
        message.warning(res.msg);
      }
    }, error => {
      message.warning(error.msg);
    })
  }


  save() {
    let params = {
      ...this.form1.getFormParams()
    };
    this.form1.validateForm().then(f => {
      if (f.isValid) {
        Api.add(params).then(response => {
          return response.json()
        }).then(data => {
          if (data.code === 200) {
            message.success(data.msg);
            this.getTableInfo();
            this.setNewVisible(false);
            this.saveAndSetting && window.open(`/spa/organization/static/index.html#/main/organization/jobExtend/${data.data}`, "_blank")
          } else {
            message.warning(data.msg);
          }
        }).catch(error => {
          message.warning(error.msg);
        })
      } else {
        f.showErrors();
        this.setDate(new Date());
      }
    });
  }

  copy() {
    let params = {
      ids: this.ids,
      ...this.form2.getFormParams()
    };
    Api.copy(params).then(response => {
      return response.json()
    }).then(data => {
      if (data.code === 200) {
        message.success(data.msg);
        this.getTableInfo();
        this.setSelectedRowKeys([]);
      } else {
        message.error(data.msg);
      }
    }).catch(error => {
      message.warning(error.msg);
    })
  }

  merge(id) {
    let params = {
      id: id,
      ...this.form2.getFormParams()
    };
    Api.merge(params).then(response => {
      return response.json()
    }).then(data => {
      if (data.code === 200) {
        message.success(data.msg);
        this.getTableInfo();
      } else {
        message.error(data.msg);
      }
    }).catch(error => {
      message.warning(error.msg);
    })
  }

  @action getHasRight() {
    Api.getHasRight().then(res => {
      if (res.code === 200) {
        res.data.rightMenu && this.setRightMenu(res.data.rightMenu);
        res.data.topMenu && this.setTopMenu(res.data.topMenu);
      } else {
        message.warning(res.msg);
      }
    }, error => {
      message.warning(error.msg);
    })
  }

  updateFields(val) {
    this.form.updateFields({
      jobTitleName: {
        value: val
      }
    });
  }

  setSearchCondition(condition) {
    this.searchCondition = condition;
  }

  setScLoadingStatus(bool) {
    this.searchConditionLoading = bool;
  }

  setPanelStatus(bool) {
    this.isPanelShow = bool;
    bool && this.getSearchCondition();
    if (!bool) {
      this.scLoadingReset();
    }
  }

  setJobName(val) {
    this.jobTitleName = val;
  }

  setJobtitleVisible(val) {
    this.jobtitleVisible = val;
  }

  isEmptyObject(obj) {
    for (let key in obj) {
      return false;
    }
    return true;
  }

  setIds(ids) {
    this.ids = ids;
  }

  setId(id) {
    this.id = id;
  }

  scLoadingReset() {
    this.searchConditionLoading = true;
  }


  formReset() {
    this.form1 = new WeaForm();
  }


  setVisible(bool) {
    this.visible = bool;
  }

  setDialogLoadingStatus(bool) {
    this.dialogLoading = bool;
  }


  setSearchCondition(searchCondition) {
    this.searchCondition = searchCondition;
  }

  setJobId(jobId) {
    this.jobId = jobId;
  }

  setDate(date) {
    this.date = date;
  }

  setTopMenu(topMenu) {
    this.topMenu = topMenu;
  }

  setRightMenu(rightMenu) {
    this.rightMenu = rightMenu;
  }

  setDataSource(dataSource) {
    this.dataSource = dataSource;
  }

  setColumns(columns) {
    this.columns = columns
  }


  setSelectedRowKeys(selectedRowKeys) {
    this.selectedRowKeys = selectedRowKeys;
  }

  setLoading(bool) {
    this.loading = bool;
  }

  setNeDialogTitle(title) {
    this.nEdialogTitle = title
  }

  setCondition(condition) {
    this.condition = condition;
  }

  setCopyCondition(copyCondition) {
    this.copyCondition = copyCondition;
  }

  setNewVisible(bool) {
    this.formReset();
    this.newVisible = bool;
  }

  setTotal(total) {
    this.total = total;
  }

  setCurrent(current) {
    this.current = current;
  }

  setPageSize(pageSize) {
    this.pageSize = pageSize;
  }

  setInit(bool) {
    this.init = bool;
  }

  setHasRight(bool) {
    this.hasRight = bool;
  }

  setSortParams(sorter) {
    this.sortParams = [];
    sorter.order && this.sortParams.push({
      orderkey: sorter.field,
      sortOrder: sorter.order
    })
  }

  setSaveAndSetting(bool) {
    this.saveAndSetting = bool;
  }

  setMergeCondition(mergeCondition) {
    this.mergeCondition = mergeCondition;
  }

  setKey(key) {
    this.key = key;
  }

}