import Vue from 'vue'
import { formatDate, fmoney, placeholder, dayjs } from 'base-core-lib'
import { get, isArray } from 'lodash' //isNumber, isNaN,
import Qs from 'qs'
import XEUtils from 'xe-utils'
import './sys_prototypes_old'
import appEnums from '@/enums';
import pinyin from 'pinyin'

/**
 * 获取枚举
 * @param {String} formName 表单名称
 */
export const getEnums = (key) => {
  return Object.keys((appEnums)[key] || {}).map((item) => ({
    value: item,
    text: (appEnums)[key][item],
    label: (appEnums)[key][item],
  }));
};

export const enums = (str) => {
  return get(appEnums, str, '');
};
/**
 * 日期差
 * @param time 时间
 */
const relativeTime = time => {
  return dayjs(time).fromNow();
}

/**
 * 转换图片URL
 * @param url 待转换的图片URL
 * @param type 转换后的大小
 */
export const transImageUrl = (url, size) => {
  if (url) {
    switch (size) {
      case 'small':
        return `${url}@!app-s`
      case 'large':
        return `${url}@!l`
    }
  } else {
    return ''
  }
}

/**
 * 转换图片URL集合
 * @param urls 待转换的图片URL集合
 * @param size 转换后的大小
 */
export const transImageUrls = (urls, size) => {
  if (isArray(urls)) {
    return urls.map(url => transImageUrl(url, size))
  } else {
    return transImageUrl(urls, size)
  }
}
/**
    * 采购模块动态权限解析
    * data:服务器返回数据
    * p1:父权限
    * p2:子权限
    */
export const resolvePermissions = (data, p1, p2) => {
  return (
    (data.resourceIds ? data.resourceIds.includes(p1) : false) &&
    (p2 ? data[p2] : true)
  )
}


/**
 *  获取当前时间 年-月-日
 *  @param type YYYY:年 MM：月 DD: 日 HH：时 mm：分 ss:秒
 *  @return 返回对应格式的当前时间
 */
Vue.prototype.nowFormatDate = (type = 'YYYY-MM-DD') => {
  return dayjs().format(type)
}

/**
 *  汉字转拼音
 *  @param value 汉字
 *  @param segment 是否启用分词模式，中文分词有助于极大的降低多音字问题。 但性能会极大的下降，内存也会使用更多。 默认开启
 *  @param segment 是否启用多音字模式，默认关闭。 关闭多音字模式时，返回每个汉字第一个匹配的拼音。启用多音字模式时，返回多音字的所有拼音列表。
 *  @param style 指定拼音 风格。可以通过以下几种 STYLE_ 开头的静态属性进行指定。
 *  @see https://www.npmjs.com/package/pinyin
 *  @return 对应拼音
 */
Vue.prototype.$pingyin = ({ value = '', segment = true, heteronym = false, style = pinyin.STYLE_NORMAL }) => {
  return pinyin(value, { segment: segment, heteronym: heteronym, style: style })
}

Vue.prototype.$permission = enums
Vue.prototype.$tl = getEnums
Vue.prototype.$rt = relativeTime
Vue.prototype.$fd = formatDate
Vue.prototype.$fmoney = fmoney
Vue.prototype.$ph = placeholder
Vue.prototype.$tiu = transImageUrl // 转换图片URL
Vue.prototype.$tius = transImageUrls // 转换图片URL集合
Vue.prototype.resolvePermissions = resolvePermissions

// 系统中原有全局函数
Vue.prototype.$qs = Qs
Vue.prototype.$utils = XEUtils
