import axios from 'axios'
import utils from '@/utils/encode'

 const env = 'test' /* */
 // const env = 'test'//   仅用于测试、
 // const env = 'production'
//42 洛超  /29 孙志华 /40 阿浩
// 测试日日顺时需要连阿浩

const testUrl = 'http://192.168.26:38080'
// const productionUrl = 'https://www.51xingka.net/oilApp' // 生产,加密 old
// const productionUrl = 'https://www.xingoil.com/adminapi' // 生产,加密 new
// const productionUrl = 'https://www.xingoil.com/adminapi' // 生产,加密 new
const productionUrl = 'http://119.177.60.118:8000/adminapi'
// const env = process.env.NODE_ENV  // 环境
const service = axios.create({
 	baseURL: env=='production'?productionUrl:testUrl, //
 	// baseURL:  testUrl, //
 	timeout: 5000
 })

var url = ''
let outTimer = null

service.interceptors.request.use(
	config => {
		console.log('这里是config',config)
		// if(config.url.indexOf('/oil-user/oilCustomerChannelRelation/getByPhone/') != -1){
		// 	uni.hideToast()
		// }else{
			// 拦截请求
			uni.showLoading({
				title: '加载中...',
				mask:true
			})
		// }
		const token = uni.getStorageSync('Authorization')
		const openid = uni.getStorageSync('device')
		const openId = uni.getStorageSync('openid')
		const unionId = uni.getStorageSync('unionid')
		const accountSources = 'LOGIN_MP_WECHAT'

		// console.log(unionId)
		// 原本为 openid
		config.headers['Authorization'] = token
		config.headers['imei'] = unionId
		config.headers['openId'] = openId
		config.headers['dataSources'] = 'MP'
		config.headers['accountSources'] = accountSources  ;
		config.headers['loginSystem'] = 'OIL_MINI_CLOUD'
		  config.headers['loginDevice'] = 'LOGIN_MP_WECHAT'
		if (env === 'production') {
			// 生产环境,加密,不输出任何东西
			// 设置jsessionid和token
			console.log('这里是生产')
			const JSESSIONID = utils.uuid()
			config.headers['JSESSIONID'] = JSESSIONID
			config.headers['token'] = utils.md5Salt(JSESSIONID)
			// if ( encryptWhite.indexOf(config.url) < 0) {
			// if (!notEncrypt && encryptWhite.indexOf(config.url) < 0) {
			// 这是定义在哪的
			const data = { // 用于存储加密
				params: '' // 加密后的密文
			}
			// console.log('请求路径', config.url, '参数加密前', config.data)
			// 要加密
			data.params = utils.encrypt(JSON.stringify(config.data)) //加密
			config.data = data
			// }
		} else {
			// console.log('请求路径', config.url, '参数加密前', config.data)
			url = config.url
		}

		return config
	},
	error => {
		uni.hideLoading()
		uni.showToast({
			title: '网络超时',
			icon: "none"
		})
		return Promise.reject(error)
	}
)

service.interceptors.response.use(
	response => {
		const res = response.data
		// const env = process.env.NODE_ENV
		// const env = 'production' // 测试中的生茶

		if (env === 'production') {
			// 生产环境,进行加密解密,不输出日志
			if (res.encrypt == 1) {
				// 加密的数据,需要解密
				const dataParam = JSON.parse(utils.decrypt(res.data))
				// console.log('解密前的data===========',res)
				// console.log('解密后的data===========',dataParam)
				// 数据解密 赋值
				res.data=JSON.stringify(dataParam) === '{}' ? null : dataParam
				// console.log('这里是res解密后的',res.data)
				// console.log('生产环境 请求路径', response.config.url, '解密为', res.data)
			}
		} else {
			console.log('请求路径', response.config.url, '返回结果未加密', res)
			console.log('-------------------------------------------')
		}

		uni.hideLoading()
		if (res.code != 20000) {
			console.log('这里是登录报错处',res)
			if(response.config.url.indexOf('/oil-user/oilCustomerChannelRelation/getByPhone/') != -1){
				// uni.hideToast()
			}else{
				uni.showToast({
					title: res.msg,
					icon: "none"
				})
			}
			if (res.msg === '登录已过期!') {
				outTimer = setTimeout(() => {
					uni.showModal({
						title: '下线提醒',
						confirmText: '重新登录',
						cancelText: "退出",
						content: '您的账号在另一微信下登录了中品云站,请确认是否本加油站工作人员操作',
						success: function(res) {
							if (res.confirm) {
								uni.reLaunch({
									url: '/pages/login/boforeLogin/boforeLogin',
									success: () => {
										console.log('跳转成功')
									},
									fail: (err) => {
										console.log(err)
									}
								})
							} else if (res.cancel) {
								uni.reLaunch({
									url: '/pages/login/boforeLogin/boforeLogin?type=1',
									success: () => {
										console.log('跳转成功')
									},
									fail: (err) => {
										console.log(err)
									}
								})
							}
						}
					});
				}, 1000)
			}
			if(res.code == 42011){
				uni.showToast({
					title: res.msg,
					icon: "none"
				})
				uni.reLaunch({
					url: '/pages/login/boforeLogin/boforeLogin',
					success: () => {
						console.log('跳转成功')
					},
					fail: (err) => {
						console.log(err)
					}
				})
			}
			if(res.code == 42077){
				uni.showToast({
					title: res.msg,
					icon: "none"
				})
				uni.reLaunch({
					url: '/pages/login/boforeLogin/boforeLogin',
					success: () => {
						console.log('跳转成功')
					},
					fail: (err) => {
						console.log(err)
					}
				})
			}

			if (res.code != 20000 && res.msg != '令牌为空,不允许操作' && res.code != 42077 && res.code != 42011 &&res.msg != '您的ip已经更改,请重新登录' && res.msg != '登录与操作设备不同') {
				uni.showToast({
					title: res.msg,
					icon: "none"
				})
				// uni.reLaunch({
				// 	url: '/pages/login/boforeLogin/boforeLogin',
				// 	success: () => {
				// 		console.log('跳转成功')
				// 	},
				// 	fail: (err) => {
				// 		console.log(err)
				// 	}
				// })
			}
		}
		return res
	},
	error => {
		uni.hideLoading()
		uni.getNetworkType({
			success: function(res) {
				console.log(res.networkType);
				if (res.networkType === 'none') {
					uni.showToast({
						title: '没有网啦!',
						icon: "none"
					})
				} else {
					uni.showToast({
						title: res.msg?res.msg:'请求失败!',
						icon: "none"
					})
				}
			}
		});

		return Promise.reject(error)
	}
)

// #ifndef H5
service.defaults.adapter = function(config) {
	return new Promise((resolve, reject) => {
		var settle = require('axios/lib/core/settle');
		var buildURL = require('axios/lib/helpers/buildURL');
		uni.request({
			method: config.method.toUpperCase(),
			url: config.baseURL + buildURL(config.url, config.params, config.paramsSerializer),
			header: config.headers,
			data: config.data,
			dataType: config.dataType,
			responseType: config.responseType,
			sslVerify: config.sslVerify,
			complete: function complete(response) {
				response = {
					data: response.data,
					status: response.statusCode,
					errMsg: response.errMsg,
					header: response.header,
					config: config
				};
				settle(resolve, reject, response);
			}
		})
	})
}
// #endif

export default service