<script setup>
import { ref, onMounted, nextTick, watch, onBeforeUnmount, getCurrentInstance } from 'vue';
import { useI18n } from "vue-i18n";
const { locale } = useI18n();

import {
	onLoad,
	onShow,
	onLaunch
} from '@dcloudio/uni-app'
import {
	updateRoute
} from "@/hooks/useRoute";
import useGlobalStore from "@/stores/use-global-store";
// import { useAppUpdate } from '@/hooks/useAppUpdate'
// const { checkUpdate } = useAppUpdate()
const globalStore = useGlobalStore()
onLoad((options) => {
	updateRoute();
	// checkUpdate()
})
onShow((options) => {
	updateRoute();
	// checkUpdate()
})

// App.vue 或你的初始化文件中
function initTheme() {
	// #ifdef H5
	// H5 端：使用 matchMedia 主动获取当前系统主题
	const isDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches
	const theme = isDarkMode ? 'dark' : 'light'
	globalStore.setGlobalTheme(theme)

	// 监听变化（你的 onThemeChange 已经能工作，但可以再加一层保险）
	const darkModeQuery = window.matchMedia('(prefers-color-scheme: dark)')
	const handleChange = (e) => {
		const newTheme = e.matches ? 'dark' : 'light'
		globalStore.setGlobalTheme(newTheme)
	}
	// 兼容旧版浏览器
	if (darkModeQuery.addEventListener) {
		darkModeQuery.addEventListener('change', handleChange)
	} else {
		darkModeQuery.addListener(handleChange)
	}
	// 设置 data-bs-theme 属性到 html 标签
	document.documentElement.setAttribute('data-bs-theme', theme);
	document.documentElement.setAttribute('data-color-theme', 'blue');
	// 同时设置到 body 标签
	document.body.setAttribute('data-bs-theme', theme);
	document.body.setAttribute('data-color-theme', 'blue');
	// #endif

	// #ifdef APP-PLUS
	// App 端：使用原生 API
	uni.getSystemInfo({
		success: (res) => {
			let theme = res.osTheme || 'light'
			globalStore.setGlobalTheme(theme)
		}
	})
	uni.onThemeChange((res) => {
		globalStore.setGlobalTheme(res.theme)
	})
	// #endif
}


onLaunch((options) => {
	// updateRoute();
	// checkUpdate()
	// 调用初始化
	// initTheme()

	// 处理 signup 路径
	handleSignupRoute(options)
})

// 解析 URL 参数
const parseUrlParams = () => {
	const params = {}

	// #ifdef H5
	// H5 端：直接从浏览器 URL 解析
	if (typeof window !== 'undefined' && window.location) {
		const href = window.location.href
		// 解析 hash 部分
		const hashIndex = href.indexOf('#')
		if (hashIndex !== -1) {
			const hash = href.substring(hashIndex + 1)
			// 解析路径
			const pathMatch = hash.match(/^\/([^/?]+)/)
			if (pathMatch) {
				params.path = pathMatch[1]
			}
			// 解析路径参数 signup/19628/RHOP4WVa/B0
			const pathParams = hash.match(/^\/signup\/([^/]+)\/?([^/]+)?\/?([^/]+)?/)
			if (pathParams) {
				params.path = 'signup'
				params.p1 = pathParams[1]
				params.p2 = pathParams[2]
				params.p3 = pathParams[3]
			}
			// 解析 query 参数
			const queryIndex = hash.indexOf('?')
			if (queryIndex !== -1) {
				const queryStr = hash.substring(queryIndex + 1)
				const pairs = queryStr.split('&')
				pairs.forEach(pair => {
					const [key, value] = pair.split('=')
					if (key && value) {
						params[key] = decodeURIComponent(value)
					}
				})
			}
		}
	}
	// #endif

	// #ifndef H5
	// App 端：从 options 参数获取
	if (typeof options === 'object' && options !== null) {
		Object.assign(params, options)
	}
	// #endif

	return params
}

// 处理 signup 和 signin 路径（仅 H5 端）
const handleSignupRoute = (options) => {
	// #ifdef H5
	// 解析 URL 参数（从浏览器 URL 解析）
	const query = parseUrlParams()
	console.log('解析到的参数:', query);

	// 处理 signin 路径（自动登录）
	if (query.path === 'signin' && query.sysLoginToken) {
		// 跳转到登录页面并携带 token 参数
		const loginUrl = `/pages/login/index?sysLoginToken=${encodeURIComponent(query.sysLoginToken)}`
		console.log('跳转到登录页面:', loginUrl);

		uni.reLaunch({
			url: loginUrl,
			success: () => {
				console.log('跳转成功');
			},
			fail: (err) => {
				console.error('跳转失败:', err);
			}
		})
		return
	}

	// 判断是否是 signup 路径
	const isSignup = query.path === 'signup' || query.s || query.signup || query.activeTab === '2'

	if (!isSignup) return

	// 获取参数
	const id = query.id || query.agentId || query.p1 || ''
	const subId = query.subId || query.w || query.p2 || ''
	const code = query.code || query.oc || query.p3 || ''

	// 构建登录页面 URL
	let loginUrl = '/pages/login/index?activeTab=2'
	// 携带参数
	if (id) loginUrl += `&id=${id}`
	if (subId) loginUrl += `&subId=${subId}`
	if (code) loginUrl += `&code=${code}`

	console.log('跳转到:', loginUrl);

	// 跳转到注册页面
	uni.reLaunch({
		url: loginUrl,
		success: () => {
			console.log('跳转成功');
		},
		fail: (err) => {
			console.error('跳转失败:', err);
		}
	})
	// #endif
}

watch(locale, () => {
	// const currentPath = route.path;
	// menu.value.forEach((item, index) => {
	// 	if (item.children) {
	// 		const isActive = item.children.some(child => child.path.includes(currentPath));
	// 		menu.value[index].isOpenMenu = isActive;
	// 		if (isActive) {
	// 			nextTick(() => {
	// 				updateSubmenuHeight(index);
	// 			});
	// 		}
	// 	}
	// });
}, { immediate: true })

// 检测版本号更新
const checkWgtUpdate = async () => {
  try {
    const currentVersion = await getCurrentVersion()
    const res = await uni.request({
      url: `https://ucard.44a5c8109e4.com/wgt/list.json?_t=${Date.now()}`,
      method: 'GET',
      timeout: 5000
    })
    const files = res.data?.files || []
    if (!files.length) return
    const latestFile = files[files.length - 1]
    const latestVersion = latestFile
    if (!latestFile) return
    const lastInstalled = uni.getStorageSync('lastWgtVersion')
    console.log(lastInstalled,'lastInstalled');
    if (latestVersion === lastInstalled) return
    if (compareVersion(latestVersion, currentVersion) > 0) {
      downloadAndInstall(latestVersion)
    }
  } catch (e) {
    console.log('[wgt] update check failed', e)
  }
}

// 下载并安装
const downloadAndInstall=(version) => {
  //TODO: 需要根据版本来确定url
  const url = `https://ucard.44a5c8109e4.com/wgt/__UNI__EFA7490.wgt`
  console.log(url,'downloadurl');

  uni.downloadFile({
    url,
    success: (res) => {
      if (res.statusCode === 200) {
        const filePath = res.tempFilePath
        plus.runtime.install(
          filePath, {
            force: true
          },
          () => {
            uni.setStorageSync('lastWgtVersion', version)
            console.log('[wgt] install success:', version)
            uni.setStorageSync('wgtNeedRestart', true)
          },
          (err) => {
            console.error('[wgt] install failed:', err)
          }
        )
      } else {
        console.error('[wgt] download status error:', res.statusCode)
      }
    },
    fail: (err) => {
      console.error('[wgt] download failed:', err)
    }
  })
}
// 获取当前版本
const getCurrentVersion = async () => {
  return new Promise((resolve, reject) => {
    // #ifdef APP-PLUS
    try {
      plus.runtime.getProperty(plus.runtime.appid, (info) => {
        resolve(info.version)
      }, (error) => {
        reject(error)
      })
    } catch (error) {
      reject(error)
    }
    // #endif
    // #ifndef APP-PLUS
    reject(new Error('Not in APP-PLUS environment'))
    // #endif
  })
}
// 对比版本号
const compareVersion = (v1, v2) => {
  const s1 = v1.split('.').map(Number)
  const s2 = v2.split('.').map(Number)
  const len = Math.max(s1.length, s2.length)

  for (let i = 0; i < len; i++) {
    const n1 = s1[i] || 0
    const n2 = s2[i] || 0
    if (n1 > n2) return 1
    if (n1 < n2) return -1
  }
  return 0
}

onMounted(() => {
	const sysInfo = uni.getSystemInfoSync();
	globalStore.setBarHeight(sysInfo.statusBarHeight || 60);

	// ---------- 新增 H5 端专属初始化 ----------
	// 仅在 H5 端执行（通过环境判断）
	// #ifdef H5
	if (typeof window !== 'undefined') {
		const instance = getCurrentInstance()
		if (instance) {
			window.vm = instance.proxy
		}
	}
	// #endif
});
</script>

<style>
/*每个页面公共css */
</style>

<style lang="scss">
/* 注意要写在第一行，同时给style标签加入lang="scss"属性 */
@import "uview-plus/index.scss";
@import "@/static/scss/global/global.scss";
@import "@/static/scss/global/vu.css";
@import "/static/scss/style.scss";

@font-face {
	font-family: 'Google Sans';
	src: url('/static/Google_Sans/GoogleSans-VariableFont_GRAD,opsz,wght.ttf') format('truetype-variations');
	font-weight: 100 900;
	font-style: normal;
	font-display: swap;
}

/* 全局字体，不破坏 uni-icons 图标 */
view,
text,
button,
input,
textarea,
label {
	font-family: 'Google Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
	font-weight: 400;
}

/* 专门保护 uni-icons 不被覆盖 */
.uni-icon,
[class*="uni-icons-"],
.uni-icons {
	font-family: uniicons !important;
}

/* 让整个项目文字都能选中 */
* {
	-webkit-user-select: text !important;
	user-select: text !important;
}

/* 修复滚动层无法选中 */
view,
text,
div,
span {
	-webkit-user-select: text !important;
	user-select: text !important;
}

/* 强制修复 uni-datetime-picker 重复渲染双日历 */
// .uni-calendar+.uni-calendar {
// 	display: none !important;
// }

:deep(.u-toolbar__wrapper__confirm) {
	font-size: 20px !important;
}

:deep(.u-toolbar__wrapper__cancel) {
	font-size: 20px !important;
}

.page {
	/* padding: 31px 31px 110px 31px; */
	box-sizing: border-box;
	/* background: var(--main-bg); */
}

html {
	--bs-bg-opacity: 1;
	background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
	font-size: 16px !important;
}

uni-page-body {
	height: 100%;
}

page {
	--bs-bg-opacity: 1;
	background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
}
</style>
