/**
 * 判断 是否为空
 * */
export function isBlank(obj) {
  return obj === null || obj === undefined || obj === "";
}

/**
 * description: 用于正确判断false js中 0==false '0'==false 1==true '1'==true,用于严格判断 true/false
 * @param data 可能含有的 0，1 的值
 * @return  boolean
 * @author jubs 😀
 * @date 2023/11/20 16:00
 */
export function judgeBoolean(data) {
  //如果不是boolean值，直接返回false
  if (typeof data !== 'boolean') {
    return false
  }
  return data === true
}


/**
 * 判断对象数组是否从小到达排序
 * */
export function isSortedObjectArray(arr, field) {
  return arr.every((item, index) => {
    if (index === 0) {
      return true;
    } else {
      return item[field] >= arr[index - 1][field];
    }
  });
}

/**
 * 判断数组是否从小到达排序
 * */
export function isSorted(arr, flag = true) {
  return arr.every((item, index) => {
    if (index === 0) {
      return true;
    } else {
      if (flag) {
        return item >= arr[index - 1];
      }
      return item > arr[index - 1];

    }
  });
}


/**
 * 判断对象数组是否从小到达排序
 * 按照自然整数排序
 * */
export function isNaturalSorted(arr, field) {
  return arr.every((item, index) => {
    // 是否等于索引加1
    return item[field] === index + 1;
  });
}

// 验证是否为blob格式
export async function blobValidate(data) {
  try {
    const text = await data.text();
    JSON.parse(text);
    return false;
  } catch (error) {
    return true;
  }
}

/**
 * 服务于el-table 多选禁用
 * row:当前行
 * selection:所选数据
 * field:校验字段
 *
 * */
export function conditionSelectDisabled(row, index, selection, field) {
  if (isBlank(selection) || selection.length === 0) {
    return true;
  } else if (isBlank(field)) {
    return true
  } else {
    return row[field] == selection[0][field]
  }

}

/**
 * 将所传入对象的所有属性,含有'%'的替换为'\%'
 * */
export function escapePercent(obj) {
  // 便利所有对象的属性名和属性值
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      const value = obj[key];
      // 判断如果属性值为STRING类型,并且包含'%' 将%转义为\%
      if (typeof value === 'string' && value.includes('%')) {
        obj[key] = value.replace(/%/g, '\\%');
      }
    }
  }
  return obj
}

/**
 * 将所传入对象的所有属性，去头尾空格
 *
 * */
export function trimBlank(obj) {
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      const value = obj[key];
      // 判断如果属性值为STRING类型,并且包含'%' 将%转义为\%
      if (typeof value === 'string') {
        obj[key] = obj[key].trim();
      } else if (typeof value === 'object') { // 处理嵌套对象
        obj[key] = trimBlank(value);
      }
    }
  }
  return obj;
}


export function emptyToNull(obj) {
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      const value = obj[key];
      // 判断如果属性值为STRING类型,并且包含'%' 将%转义为\%
      if (typeof value === 'string' && obj[key] === '') {
        obj[key] = null;
      } else if (typeof value === 'object') { // 处理嵌套对象
        obj[key] = emptyToNull(value);
      }
    }
  }

  return obj;
}


/**
 * 首字母大写
 * @param string
 * @returns {string}
 */
export function capitalizeFirstLetter(string) {
  return string.charAt(0).toUpperCase() + string.slice(1);
}


/**
 *  处理 进入一级页面时，数据被删除，页面需要强制关闭
 *
 * */
export function forceCloseAfterDelete(_this, url) {
  _this.$confirm('所选数据已被删除，将在确认后关闭页面', '提示信息', {
    confirmButtonText: '确定'
  }).then(() => {
    _this.closeOpenPage(url);
  })
}

/**
 * 处理暂存时，如果 已经是已撤回 或者 已驳回状态，状态不变,否则草稿；
 * */
export function handleSaveDraftStatus(_this, status) {
  return [_this.AuditStatus.REJECT, _this.AuditStatus.ROLLBACK].includes(status) ? status : _this.AuditStatus.DRAFT;
}

const COMMON_KEYS= {
  ADD :'common.add',
  EDIT :'common.edit',
  DELETE :'common.delete',
  EXPORT :'common.export',
  CREATE_TIME:'common.createTime',
  OPERATE:'common.operate',
  MORE:'common.more',
  CLOSE:'common.close',

}


function  translateCommon(key){
  return isBlank(VueI18n.t(key)) ? "" : VueI18n.t(key);
}

export function getMessageTitle(type) {
  let code = "messageType.";
  let isText = false;
  switch (type) {
    case "0" : code+="lead";
          break;
    case "1" : code+="project";
      break;
    case "2" : code+="account";
      break;
    case "11" : code+="projectUnFollow";
      break;
    case "13" : code+="nonStandFollow";
      break;
    case "14" : code+="bargainFollow";
      break;
    case "15" : code+="quotationFollow";
      break;
    case "18" : code+="projectDealDay";
      break;
    case "19" : code+="agentContractDay";
      break;
    default: isText = true
  }
  return isText ? type : this.$t(code);
}
export function buildRegexFromArray(arr) {
  const regexStr = arr.join('|');
  return new RegExp(`(/^${regexStr}$/)`, 'ig');
}

export  {
  COMMON_KEYS,
  translateCommon
}



