<template>
  <!-- 固定白色块（滚动时显示） -->
  <view class="hand" :style="{height : handHeight + 'rpx'}" v-show="isShow"></view>
  
  <!-- 滚动内容区域 -->
  <scroll-view 
    scroll-y 
    refresher-enabled
    :refresher-triggered="isRefreshing"
    refresher-default-style="none"
    @refresherrefresh="onRefresh"
    @scroll="handleScroll"
    class="scroll-container"
  >
    <!-- 主内容 -->
    <view class="home-page">
      <HomeSkeleton v-if="loading" />
      <template v-else>
        <BannerSwiper />
        <QuickEntry />
        <RecommendCourses />
        <TodayRecommend />
        <view class="bottom-placeholder"></view>
      </template>
    </view>
  </scroll-view>
  
  <!-- TabBar 固定在底部 -->
  <view class="tabbar-fixed">
    <TabBar />
  </view>
</template>

<script setup>
import { ref, onMounted } from 'vue'
import BannerSwiper from '@/components/index/BannerSwiper.vue'
import QuickEntry from '@/components/index/QuickEntry.vue'
import RecommendCourses from '@/components/index/RecommendCourses.vue'
import TodayRecommend from '@/components/index/TodayRecommend.vue'
import TabBar from '@/components/TabBar.vue'
import HomeSkeleton from '@/components/Skeleton/HomeSkeleton.vue'

const loading = ref(true)
const isShow = ref(false)
const handHeight = ref(0)
const scrollDistance = ref(0)
const isRefreshing = ref(false)

// 获取可视窗口高度
const windowHeight = ref(0)
// 获取整个滚动内容的高度
const scrollContentHeight = ref(0)

// 滚动监听
const handleScroll = (e) => {
  const distance = e.detail.scrollTop
  scrollDistance.value = distance
  
  console.log(`滚动距离: ${distance}`)
  
  // 当滚动超过一定距离时显示白色块（200px = 400rpx）
  const SHOW_THRESHOLD = 50 // 滚动超过200px时显示白条
  isShow.value = distance > SHOW_THRESHOLD
}

// 下拉刷新处理
const onRefresh = async () => {
  console.log('开始下拉刷新')
  isRefreshing.value = true
  
  try {
    await refreshData()
    isRefreshing.value = false
    uni.showToast({
      title: '刷新成功',
      icon: 'success'
    })
  } catch (error) {
    console.error('刷新失败', error)
    isRefreshing.value = false
    uni.showToast({
      title: '刷新失败',
      icon: 'error'
    })
  }
}

// 刷新数据
const refreshData = () => {
  return new Promise((resolve) => {
    setTimeout(() => {
      console.log('数据已刷新')
      resolve()
    }, 1500)
  })
}

onMounted(() => {
  setTimeout(() => {
    loading.value = false
  }, 1500)
  
  // 获取系统信息
  uni.getSystemInfo({
    success: (res) => {
      windowHeight.value = res.windowHeight
      console.log('可视窗口高度:', windowHeight.value)
      console.log('平台:', res.platform)
      
      // #ifdef MP-WEIXIN
      // 微信小程序使用胶囊按钮高度（保持原有逻辑）
      const menuButtonInfo = uni.getMenuButtonBoundingClientRect()
      const navTotalHeight = menuButtonInfo.top + menuButtonInfo.height
      handHeight.value = navTotalHeight * 2.5
      console.log('微信小程序胶囊按钮高度:', handHeight.value)
      // #endif
      
      // #ifndef MP-WEIXIN
      // H5和安卓App只显示状态栏高度
      const statusBarHeight = res.statusBarHeight || 0
      handHeight.value = statusBarHeight * 2 // 转换为rpx（1px = 2rpx）
      console.log('非微信小程序状态栏高度:', handHeight.value, 'rpx')
      // #endif
    }
  })
  
  // 延迟获取滚动内容高度（确保DOM已渲染）
  setTimeout(() => {
    const query = uni.createSelectorQuery().in(this)
    query.select('.home-page').boundingClientRect(data => {
      if (data) {
        scrollContentHeight.value = data.height
        console.log('内容总高度:', scrollContentHeight.value)
      }
    }).exec()
  }, 500)
})
</script>

<style lang="scss" scoped>
/* 滚动容器 */
.scroll-container {
  position: relative;
  z-index: 1;
  height: 100vh;
  width: 100%;
}

/* 主内容区域 */
.home-page {
  min-height: 100vh;
  padding-bottom: 160rpx;
}

/* 固定白色块 */
.hand {
  position: fixed;
  top: 0;
  left: 0;
  z-index: 100;
  background-color: white;
  width: 100%;
}

/* 固定 TabBar */
.tabbar-fixed {
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  z-index: 1000;
  background-color: transparent;
}

.bottom-placeholder {
  height: 120rpx;
}
</style>