
/**
 * 
 * @param {*} modelData 当前绑定的数据模型
 * @param {*} actions 操作集合
 * @returns 
 */
export default function(modelData, actions){
    
  this.modelData = modelData;

  /**
     * 获取数据记录的Id
     */
  this.getRecordId = function(){
    return this.modelData.id;
  },

  /**
     * 获取字段(文本、数字类型)的值
     * @param {string} fieldName 字段名称
     */
  this.getFieldValue = function(fieldName){
    return this.modelData.data[fieldName];
  };
    
  /**
     * 设置字段(文本、数字类型)的值
     * @param {string} fieldName 字段名称
     * @param { com.leanwo.prodog.restful.base.model.FieldValue } fieldValue 字段值
     */
  this.setFieldValue = function(fieldName, fieldValue){
    this.modelData.data[fieldName] = fieldValue;
  };

  /**
     * 获取字段（搜索框、下拉框类型)的id
     * @param {string} fieldName 字段名称
     */
  this.getFieldValueId = function(fieldName){
    return this.modelData.data[fieldName].id;
  };

  /**
     * 设置字段（搜索框、下拉框类型)的id
     * @param {string} fieldName 字段名称
     * @param {long} id 
     */
  this.setFieldValueId = function(filedName, id){
    this.modelData.data[filedName].id = id;
  };

  /**
     * 获取显示的值,返回数组
     * @param {string} fieldName 字段名称
     */
  this.getDispalyValue = function(fieldName){
    return this.modelData.data[fieldName].displayValue;
  };

  /**
     * 设置显示的值(数组)
     * @param {string} fieldName 字段名称
     * @param {*} displayValue 数组
     */
  this.setDispalyValue = function(fieldName, displayValue){
    this.modelData.data[fieldName].displayValue = displayValue;
  };

  /**
     * 获取显示的第一个值
     * @param {string} fieldName 字段名称
     */
  this.getDispalyValue0 = function(fieldName){
    return this.modelData.data[fieldName].displayValue[0];
  };

  /**
     * 设置显示的第一个值
     * @param {string} fieldName 字段名称
     * @param {string} displayValue0 显示的值
     */
  this.setDispalyValue0 = function(fieldName, displayValue0){
    this.modelData.data[fieldName].displayValue[0] = displayValue0;
  };

  /**
     * 设置自定义的属性
     * @param {string} propertyName 属性名称
     * @param {object} propertyValue 属性值
     */
  this.setCustomerProperty = function(propertyName, propertyValue){
    if(this.calloutProperty ==  null){
      this.calloutProperty = {};
    }
    this.calloutProperty[propertyName] = propertyValue;
  };

  /**
     * 获取自定义的属性
     * @param {string} propertyName 属性名称
     */
  this.getCustomerProperty = function(propertyName){
    if(this.calloutProperty ==  null){
      this.calloutProperty = {};
    }
    return this.calloutProperty[propertyName];
  };

  /**
     * 获取API的地址
     * @param {string} apiName 
     * @returns 
     */
  this.getApiURL = function(apiName){
    //获取当前网址，如： http://localhost:8083/myproj/view/my.jsp
    var curWwwPath = window.document.location.href;
    //获取主机地址之后的目录，如： myproj/view/my.jsp
    var pathName = window.document.location.pathname;
    var pos = curWwwPath.indexOf(pathName);
    //获取主机地址，如： http://localhost:8083
    var localhostPath = curWwwPath.substring(0, pos);
    return localhostPath + '/api/' + apiName;
  };

  /**
     * AJAX 请求头添加token
     * @param {object} request 请求 
     */
  this.addTokenToRequest = function(request){
    request.setRequestHeader('token', localStorage.getItem('#token'));
  };

  /**
     * 获取子页签的数据
     * @param {int} tabIndex 子页签的序号
     */
  this.getSubTabModelDatas = function(tabIndex){
    if(actions === undefined || actions === null){
      console.error('操作集合 actions 为空，不能获取子页签的数据。');
      return;
    }

    const subTabsRef = actions.subTabsRef;
    if(subTabsRef === undefined || subTabsRef === null){
      console.error('操作集合 action.subTabsRef 为空，不能获取子页签的数据。');
      return;
    }
        
    return subTabsRef[tabIndex].modelDatas;
  };

  /**
     * 子页签增加数据
     * @param {int} tabIndex 子页签的序号
     * @param {com.leanwo.prodog.restful.base.model.ModelData} subTabNewModelData 子页签新增的数据
     */
  this.addSubTabModelData = function(tabIndex, subTabNewModelData){
    return this.subTabsRef[tabIndex].addModelData(subTabNewModelData);
  };

  /**
     * 修改父页签的数据
	 * @param { String } fieldName 字段名称
	 * @param { com.leanwo.prodog.restful.base.model.FieldValue } fieldValue 字段的值
	 * @author YangZhiJie 20211012
     */
  this.changeParentModelData = function(fieldName, fieldValue){
    if(actions === undefined || actions === null){
      console.error('操作集合 actions 为空，不能修改父页签的数据。');
      return;
    }

    const changeParentModelData = actions.changeParentModelData;
    if(changeParentModelData === undefined || changeParentModelData === null){
      console.error('操作集合 action.changeParentModelData 为空，不能修改父页签的数据。');
      return;
    }

    changeParentModelData(fieldName, fieldValue);
  };

  /**
     * 获取本页签的表格数据
     */
  this.getModelDatas = function(){
    if(actions === undefined || actions === null){
      console.error('操作集合 actions 为空，不能获取本页签的表格数据。');
      return;
    }
    return actions.modelDatas;
  };


  return this;
};