import { noEmpty } from '@utils'
const Http = (options = { data: {} }) => {
  return new Promise((resolve, reject) => {
    if (options.loadingStr === 'loading') {
      uni.showLoading({
        mask: true,
        title: '加载中..'
      })
    }
		let token = uni.getStorageSync('MD_token') || ''
    let header = {
      'Content-Type': 'application/json',
			'token': token,
      // 'Content-Type': 'application/x-www-form-urlencoded'
    }
    let params = {...options.data}
    if (uni.getStorageSync('APP_token')) params.token = uni.getStorageSync('APP_token')
    for (let key in options.data) {
      if (options.data[key] === undefined || options.data[key] === 'undefined') {
        params[key] = ''
      }
    }
		let url = uni.baseUrl + options.url
		// let url = options.url
		if (options.queryData) {
			let qStr = ''
			for(let k in options.queryData) {
				qStr += `${k}=${options.queryData[k]}&`
			}
			qStr = qStr.substr(0, qStr.length - 1)
			url += `?${qStr}`
		}
    uni.request({
			url,
			data: {
				...params
			},
			header,
			method: options.method || 'POST',
			complete: res => {
				if (options.loadingStr === 'loading') {
					uni.hideLoading()
				}
			},
			success: res => {
				const { data: cData } = res
				const code = cData.errno
				switch (code) {
					case 0:
						return resolve(noEmpty(cData.data) ? cData.data : cData)
						break
					case 401:
					case 404:
					case 405:
						uni.removeStorageSync('MD_userInfo')
						const u2 = uni.getStorageSync('MD_userInfo2')
						if (u2.bind_wechat === '1' && uni.getStorageSync('MD_token')) {
							uni.login({
								success: function (res) {
									if (res.code) {
										uni.api.base.apiwxautologin({code: res.code}).then(cData => {
											if (cData.token === 'error') {
												uni.removeStorageSync('MD_token')
											} else {
												uni.setStorageSync('MD_userInfo', cData)
												uni.setStorageSync('MD_token', cData.token)
												uni.api.base.apidicttree().then(res => {
													const cObj = res || {}
													let newDict = {}
													for (let k in cObj) {
														const cArr = cObj[k].map(item => {
															return {
																...item,
																key: item.dict_label,
																val: item.dict_value
															}
														})
														newDict[k] = cArr
													}
													uni.setStorageSync('MD_dict', newDict)
												})
												uni.api.base.apiuserinfo().then(res2 => {
													uni.setStorageSync('MD_userInfo2', res2)
													uni.reLaunch({
														url: '/pages/index/index'
													})
												})
											}
										})
									}
								}
							})
						} else {
							uni.showToast({
								title: `请先登录~`,
								icon: 'none',
							})							
							uni.navigateTo({
								url: '/pages/user/login/login'
							})
						}
					  break
					default:
						uni.showModal({
							title: '提示',
							content: `${cData.errmsg}(${code})`,
						})
						return reject(cData)
				}
				// resolve()
			},
			fail: err =>  {
				console.log(err)
				reject(err)
			}
		})
  })
}
// export default Http

function request (url, data, loadingStr, queryData) {
  return Http({
    url,
    data,
    loadingStr,
    queryData,
  })
}
export {
  request,
}
