<template>
	<view class="p-10">
		<text id="page-props-composition-title" class="text">{{title}}</text>
		<text id="page-props-composition-from" class="text">{{from}}</text>
		<text id="page-props-composition-number" class="text">{{number}}</text>
		<text id="page-props-composition-boolean" class="text">{{boolean}}</text>
		<text id="page-props-composition-object" class="text">{{JSON.stringify(object)}}</text>
		<text id="page-props-composition-array" class="text">{{JSON.stringify(array)}}</text>
	</view>
</template>

<script setup>
	import { setLifeCycleNum, state } from '@/store/index.uts'
	
	defineProps({
		from: {
			type: String,
			default: 'bbb'
		},
		number: {
			type: Number,
			default: 1,
			validator(value: number) {
				return value > 0
			}
		},
		boolean: {
			type: Boolean,
			required: true,
		},
		object: {
			type: UTSJSONObject,
			default: () => {
				return {
					a: 'a',
					b: 'b'
				}
			}
		},
		array: {
			type: Array as PropType<string[]>,
			default: () => {
				return ['a','b','c']
			}
		}
	})
	
	onBeforeMount(() => {
		console.log('page-props-composition onBeforeMount')
		// 自动化测试
		setLifeCycleNum(state.lifeCycleNum + 1)
	})
	
	onMounted(() => {
		console.log('page-props-composition mounted')
		// 自动化测试
		setLifeCycleNum(state.lifeCycleNum + 1)
	})
	
	onBeforeUpdate(() => {
		console.log('page-props-composition beforeUpdate')
		// 自动化测试
		setLifeCycleNum(state.lifeCycleNum + 1)
	})
	
	onUpdated(() => {
		console.log('page-props-composition updated')
		// 自动化测试
		setLifeCycleNum(state.lifeCycleNum + 1)
	})
	
	onBeforeUnmount(() => {
		console.log('page-props-composition beforeUnmount')
		// 自动化测试
		setLifeCycleNum(state.lifeCycleNum + 1)
	})
	
	onUnmounted(() => {
		console.log('page-props-composition unmounted')
		// 自动化测试
		setLifeCycleNum(state.lifeCycleNum + 1)
	})
	// 组合式 API 且作为组件使用时会触发页面生命周期, 但监听到的是作为组件时所在页面的,而非它自身的
	onLoad((options: OnLoadOptions) => {
		console.log('page-props-composition onLoad options', options)
		// 自动化测试
		if (options['name'] == 'page-props') {
			setLifeCycleNum(state.lifeCycleNum + 5)
		}
		setLifeCycleNum(state.lifeCycleNum + 10)
	})
	onPageShow(() => {
		console.log('page-props-composition onPageShow')
		// 自动化测试
		setLifeCycleNum(state.lifeCycleNum + 10)
	})
	onReady(() => {
		console.log('page-props-composition onReady')
		// 自动化测试
		setLifeCycleNum(state.lifeCycleNum + 10)
	})
	onHide(() => {
		console.log('page-props-composition onHide')
		// 自动化测试
		setLifeCycleNum(state.lifeCycleNum + 10)
	})
	onUnload(() => {
		console.log('page-props-composition onUnload')
		// 自动化测试
		setLifeCycleNum(state.lifeCycleNum + 10)
	})

	const title = ref('page-props-composition')

	// 自动化测试
  const pageSetLifeCycleNum = (num: number) => {
    state.lifeCycleNum = num
  }
  const pageGetLifeCycleNum = () : number => {
    return state.lifeCycleNum
  }
  defineExpose({
		pageSetLifeCycleNum,
		pageGetLifeCycleNum
  })
</script>

<style>
	.text {
		font-size: 18px;
		color: #8f8f94;
    text-align: center;
	}
</style>