import * as util from './util'
import storage from "@/utils/storage";
import {deletePageStyle, setPageStyle} from "@/utils/uniFunction";
import {isObject} from "./util";

/**
 * 显示成功提示框
 */
export const showSuccess = (msg, callback = null, duration = 1500) => {
  uni.showToast({
    title: `${msg}`,
    icon: 'success',
    mask: true,
    duration,
    success() {
      if (callback)
        setTimeout(() => {
          callback()
        }, duration)
    }
  })
}

/**
 * 显示失败提示框
 */
export const showError = (msg, callback = null, duration = 1500) => {
  uni.showModal({
    title: '友情提示',
    content: `${msg}`,
    showCancel: false,
    success(res) {
      if (callback)
        setTimeout(() => {
          callback()
        }, duration)
    },
    fail(err) {
      console.log('showError fail', err)
    },
  })
}

/**
 * 显示失败提示框
 */
export const confirmModal = (msg, options = {}) => {
  return new Promise((resolve, reject) => {
    let allOptions = Object.assign({
      title: '温馨提示',
      content: `${msg}`,
      showCancel: true,
      success: res => {
        if (res.confirm) {
          resolve(res)
        } else {
          reject(res)
        }
      },
      fail: res => reject(res)
    }, options)
    uni.showModal(allOptions)
  })
}

/**
 * 显示纯文字提示框
 */
export const showToast = (msg, duration = 1500) => {
  let data = {
    title: `${msg}`,
    icon: 'none',
    duration
  }
  if (!isObject(duration)) {
    data.duration = duration
  } else {
    data = Object.assign(data, duration)
  }
  uni.showToast(data)
}

/**
 * tabBar页面路径列表 (用于链接跳转时判断)
 * tabBarLinks为常量, 无需修改
 */
export const getTabBarLinks = () => {
  const tabBarLinks = [
    // 'pages/index/index',
  ]
  return tabBarLinks
}

/**
 * 生成完整的H5地址 [带参数]
 * @param {string} h5Url H5访问地址
 * @param {string} path 页面路径
 * @param {object} params 页面参数
 * @return {string}
 */
export const buildUrL = (h5Url, path, params) => {
  let complete = h5Url
  if (!util.isEmpty(path)) {
    complete += '#/' + path
    const shareParamsStr = getShareUrlParams(params)
    if (!util.isEmpty(shareParamsStr)) {
      complete += '?' + shareParamsStr
    }
  }
  return complete
}

/**
 * 跳转到指定页面url
 * 支持tabBar页面
 * @param {string}  url
 * @param {object}  query
 */
export const navTo = (url, query = {}, isLogin = false) => {
  if (!url || url.length == 0) {
    return false
  }
  if (isLogin && !checkLogin()) {
    checkLogin(true)
    return;
  }
  // 生成query参数
  const queryStr = !util.isEmpty(query) ? '?' + util.urlEncode(query) : ''
  // tabBar页面, 使用switchTab
  if (util.inArray(url, getTabBarLinks())) {
    if (queryStr) {
      uni.reLaunch({
        url: `/${url}${queryStr}`
      })
    } else {
      uni.switchTab({
        url: `/${url}`
      })
    }
    return true
  }
  // 普通页面, 使用navigateTo
  uni.navigateTo({
    url: `/${url}${queryStr}`
  })
  return true
}

/**
 * 跳转到指定页面url 并关闭当前页面
 * 支持tabBar页面
 * @param {string}  url
 * @param {object}  query
 * @param type
 */
export const redirectTo = (url, query = {}, type = 1) => {
  if (!url || url.length == 0) {
    return false
  }
  // tabBar页面, 使用switchTab
  if (util.inArray(url, getTabBarLinks())) {
    uni.switchTab({
      url: `/${url}`
    })
    return true
  }
  // 生成query参数
  const queryStr = !util.isEmpty(query) ? '?' + util.urlEncode(query) : ''

  if (type === 1) {
    uni.redirectTo({
      url: `/${url}${queryStr}`
    })
    return true
  } else if (type === 2) {
    uni.reLaunch({
      url: `/${url}${queryStr}`
    })
    return true
  }
  return true
}

/**
 * 验证是否已登录
 */
export const checkLogin = (isLogin = false, is_confirm = false) => {
  let token = storage.getKey('LOGIN_TEACHER_TOKEN');
  if (token) return !!token;
  if (isLogin) {
    // 要登录
    if (is_confirm == true) {
      uni.showModal({
        title: '温馨提示',
        content: '此时此刻需要您登录喔~',
        // showCancel: false,
        confirmText: "去登录",
        cancelText: "再逛会",
        success: res => {
          if (res.confirm) {
            uni.navigateTo({
              url: "/pages/auth/index"
            })
          }
          if (res.cancel && getCurrentPages().length > 1) {
            uni.navigateBack()
          }
        }
      })
    } else {
      redirectTo('/pages/auth/index')
    }
  } else {
    // 无需登录
    return !!token
  }
}

export const navigateBack = (num = 1, callback) => {
  uni.navigateBack({
    delta: num,
    success(res) {
      if (callback) callback()
    }
  })
}

/**
 * 设置页面标题
 * @param title
 */
export const setPageTitle = (title = '标题') => {
  uni.setNavigationBarTitle({
    title
  });
}

/**
 * 获取指定页面信息
 * @param num
 * @returns {Page.PageInstance<AnyObject, {}>}
 */
export const getBeforePage = (num = 1) => {
  let pages = getCurrentPages(); // 当前页面
  let index = pages.length - 1
  let beforePage = pages[index - num]; // 前一个页面
  return beforePage
}

/**
 * 锁定滚动
 * @param pageStyle
 * @returns {string}
 */
export const lockScroll = (pageStyle) => {
  return setPageStyle(pageStyle, {
    overflow: 'hidden',
    'max-height': '100vh', // h5 问题
  })
}

/**
 * 解除锁定滚动
 * @param pageStyle
 * @returns {string}
 */
export const unLockScroll = (pageStyle) => {
  return deletePageStyle(pageStyle, ['overflow', 'max-height'])
}

export const adMethod = (v) => {
  if (!v.method) return !1
  switch (v.method) {
    case 'adgo':
      if (v.line && checkLogin()) {
        uni.navigateTo({
          url: v.line,
          fail: function () {
            uni.switchTab({
              url: v.line
            })
          }
        })
      }
      break;
  }
}
