import { projectInfo,OFFICIAL_URL} from "@/config/index.js";
import i18n from '../locale/index';
import { useLoginApi } from "@/Apis/login.js";
import { useMainStore } from "@/store/index.js";
const getApi = useLoginApi();
const { t } = i18n.global;

export const onTabItemTap = (event)=>{
	if(event.index === 2) {
		 makePhoneCall()
		return 
	}
	 uni.switchTab({
	        url: `/${event.pagePath}`
	      });
}
export const makePhoneCall = (phoneNumber = projectInfo.callPhone)=>{
	if(!(typeof phoneNumber == 'string' || typeof phoneNumber == 'number')){
		phoneNumber = '4008181813'
	}
	uni.makePhoneCall({
	       phoneNumber,
	     });
}
// tab列
const pagePathList = [
	'/pages/index/index',
	'/pages/unlock/index',
	'/pages/personal/index',
] 
export const navigateBack = (url)=>{
	  const app = getApp();
	
	const pages = getCurrentPages()
		// 有可返回的页面则直接返回，uni.navigateBack  默认返回失败之后会自动刷新页面 ，无法继续返回
		if (pages.length > 1) {
		 uni.navigateBack(1)
		 return;
		}
		if(url){
			if(pagePathList.includes(url))
			{
				uni.switchTab({
					url,
				})
			}else{
				uni.navigateTo({
				 url,
				})
			}
			
			return 
		}
		uni.reLaunch({
		 url: "/pages/index/index"
		})
		return;
}
// onshow 判断有没token 没有就不去请求 有的话就去请求
export const onShowRerequestByIsLogin = (callBack,errCallBack)=>{
	// 检查是否存在token 没有直接跳转
	const token = uni.getStorageSync('token')
	if(token){
	    callBack()
	}else{
		errCallBack&&errCallBack()
	}
	
}
// 登陆完 是否可以返回到登录前的页面
export const isToHome = () => {
    let routes = getCurrentPages();
	let isNeeToHome = false;
    // 登录后返回原来页面的路由
    let refreshPage = ["pages/unlock/index", "pages/setOrder/index", "pages/site/index", "pages/orderdetail/index", "pages/orderdetail/door", "pages/orderdetail/lock","pagesb/reserve/index"];
    let preRoute = routes[routes.length - 2]?.route;
    if (preRoute && refreshPage.includes(preRoute)) {
		isNeeToHome = false
	}else{
		isNeeToHome = true
	}
	if (isNeeToHome) {
		uni.reLaunch({
			url:'/pages/index/index'
		});
	} else {
		navigateBack();
	}
}

// 将角度转换为弧度常量
const RADIANS_PER_DEGREE = Math.PI / 180.0;
// 通过经纬度计算两点之间距离
export const getDistance = (lat1, lng1, lat2, lng2) => {
	const radLat1 = lat1 * RADIANS_PER_DEGREE;
    const radLat2 = lat2 * RADIANS_PER_DEGREE;
	const deltaLat = radLat1 - radLat2;
	const deltaLng = lng1 * RADIANS_PER_DEGREE - lng2 * RADIANS_PER_DEGREE;
    let distance = 2 * Math.asin(Math.sqrt(Math.sin(deltaLat / 2) ** 2 + Math.cos(radLat1) * Math.cos(radLat2) * Math.sin(deltaLng / 2) ** 2));
	distance = distance * 6378.137;	// 地球半径
	distance = Math.round(distance * 10) / 10;
	if (distance > 99) {
		return { distance: ">99", number: distance };
	}
	return { distance, number: distance };
}
// 导出导航栏高度
export const navbarHeightAndStatusBarHeight = () => {
	let systemInfo = {};
	// #ifdef MP-WEIXIN
	systemInfo = uni.getDeviceInfo();
	// #endif
    let navbarHeight = 0;
	let statusBarHeight = 0;
	let iStatusBarHeight = 0;
	 

	navbarHeight = getApp().globalData.navbarHeight;
	statusBarHeight = getApp().globalData.statusBarHeight;
	iStatusBarHeight = uni.getSystemInfoSync().statusBarHeight
	// 不知道什么原因   navbarHeight 会出现0的情况 如果为0 再重新获取一下
	if (navbarHeight === 0 || statusBarHeight === 0) {
		// #ifdef MP-WEIXIN || MP-XHS
		// 状态栏高度
		const wxStatusBarHeight = uni.getSystemInfoSync().statusBarHeight;
		const wxMenuBtn = uni.getMenuButtonBoundingClientRect();
		// 导航栏高度(标题栏高度) = 胶囊高度 + (顶部距离 - 状态栏高度) * 2
		const barHeight = wxMenuBtn.height + (wxMenuBtn.top - wxStatusBarHeight) * 2;
		// 总体高度 = 状态栏高度 + 导航栏高度
		navbarHeight = (barHeight || 40) + wxStatusBarHeight+iStatusBarHeight;
		statusBarHeight = wxStatusBarHeight || 20;
		// #endif
	}else{
     // #ifdef APP-PLUS
	 navbarHeight =	navbarHeight+iStatusBarHeight
	 // #endif
	}

	// 判断是否为PC（Windows、Mac）
	if (systemInfo.platform === 'windows' || systemInfo.platform === 'mac') {
		// 在这里处理PC端的逻辑
		let tempHeight = {
			navbarHeight,
			statusBarHeight
		}
		return {
			navbarHeight: 0,
			statusBarHeight: 0,
			tempHeight
		}
	}

	return {
		navbarHeight,
		statusBarHeight
	}
}
// h5 跳转小程序
export const h5GoWx =(successCallback, failCallback,completeCallback)=>{
	uni.showModal({
		cancelText:t("request.cancel"),
		confirmText:t("request.confirm"),
		title:t("request.tip"),
		content:"前往去登录吗？",
		success:(e)=>{
			if(e.confirm){
				shunfenLogin()
			    // window.location.href = OFFICIAL_URL
			}
			successCallback && successCallback(e)
		} ,
		fail: failCallback,
		complete: completeCallback
	  })
}
// 去掉小数点后两位
export const removeTrailingZeros = (num) => {
	// Check if input is a valid number
	if (isNaN(num) || num === null || num === undefined) {
		return num;
	}
	// Convert to float and then to string to remove trailing zeros
	return parseFloat(num).toString();
  }

// 分享页的参数
export const shareParam = {
	title: `${projectInfo.miniName}`,
	path: '/pages/index/index'
}

// 根据门店id 跳转到时昌的小程序
export const jumpToSc = [
	{ id: '1906958815820124160', targetId: '1881917629627764736' },
]

// 五羊门店的id
export const wuyangSiteIds = [
    '1854360658481647616',
    '1854360658913660928',
    '1854360659777687552',
    '1854360654157320192',
  ]
//  ['10078', '10079', '10082', '10084']
// [
//     '1854360658481647616',
//     '1854360658913660928',
//     '1854360659777687552',
//     '1854360654157320192',
//   ];


/**
 * 合并五羊门店，把同组 id push 到 siteList
 * @param {Array} stores 门店列表
 * @returns {Array}
 */
export const mergeFiveGoatStores = (stores) => {
  // 找到所有存在的五羊门店（按原顺序）
  const existing = wuyangSiteIds
    .map(id => stores.find(s => s.id === id))
    .filter(Boolean);

  if (existing.length === 0) return stores; // 没有任何五羊门店，不处理

  // 选出主门店（按 ids 顺序第一个存在的）
  const mainStore = existing[0];

  // 其余门店作为子站点
  const siteList = existing.slice(1);

  return stores
    .filter(store => !wuyangSiteIds.includes(store.id) || store.id === mainStore.id) // 非主门店不再出现在列表
    .map(store => {
      if (store.id === mainStore.id) {
        return {
          ...store,
          siteList,
          isFiveGoatStores: siteList.length > 0,
        };
      }
      return store;
    });
};

// 把 url 的参数转换成对象
export const parseUrlParams = (url) => {
	const params = {};
	const queryString = url.split('?')[1];
	if (!queryString) return params;

	const pairs = queryString.split('&');
	for (const pair of pairs) {
		const [key, value] = pair.split('=');
		if (key) {
			params[key] = value || '';
		}
	}
	return params;
} 
// 顺丰参数
export const shunfenLogin = async (code) => {
	// 授权参数（请根据实际情况修改）reserved 传原参
	let successUrl = window?.config?.BACK_URL ?? "https://uat.kingkongcang.com/client/"
	// 如果顺丰员工Id 存在 就把sfId 传过去 怕授权的时候url参数丢失
	const sfId = uni.getStorageSync("sfId");
	if(sfId){
		successUrl = successUrl+"?sfId="+sfId
	}
	console.log(successUrl,"successUrl")
	const authOptions = {
  appId: window?.config?.SF_APP_ID ??"202603041358374970", // 第三方接入ID
  scope: ["sf_userinfo", "sf_mobile", "sf_base", "sf_emp", "sf_channelId"],
  successUrl, // 当前页面地址
};
 window.sf.getAuthCode({
    ...authOptions,
  })
    .then(async(res) => {
		if (window.sf.isSfApp()) {
			const authCode = res.authCode;
			if(authCode){
				let source = window.sf.isSfApp() ? 2 : 1;
				uni.showLoading({
					mask:true,
				});
				getApi.ShunFengLogin({
			        		code:authCode,
							source,
			        	})
			        	.then(async(res) => {
			        		uni.hideLoading();
			        		if (res.code == 200) {
										const store = useMainStore(); // ✅ 在这里调用
										store.storeState.token = res.data.token;
										store.storeState.hasTrytoLogin = true;
										await store.getUserInfo();
										console.log("token", res.data.token);
										uni.setStorageSync("token", res.data.token);
										uni.setStorageSync("openId", res.data.openId);
										console.log("登陆成功", res.data.openId);
			        			
			        		}
			        	}).catch((err) => {
			        	})
			}else{
				shunfenLogin()
			}
		}
		console.log('getAuthCode success',res);
	})
    .catch((err) => console.log('getAuthCode err',err));
    
}
// 获取url 参数
export const getQueryParam = (name, url = window.location.href) => {
  const u = new URL(url)

  // 优先从正常 query 取
  let params = new URLSearchParams(u.search)
  let value = params.get(name)
  if (value) return value

  // 再从 hash 取
  const hash = u.hash.split('?')[1]
  if (!hash) return null

  params = new URLSearchParams(hash)
  return params.get(name)
}