<template>
  <view class="home-container">
    <!-- 状态栏安全区域 -->
    <uv-status-bar></uv-status-bar>
    
    <!-- 顶部搜索栏 -->
    <view class="header">
      <view class="search-container" @click="goSearch">
        <uv-search 
          placeholder="请输入要查询的内容" 
          :show-action="false"
          shape="round"
          bg-color="#f5f5f5"
          color="#666"
          height="38"
          margin="0 200rpx 0 0"
          placeholderColor="#c6c6c6"
        ></uv-search>
      </view>

    </view>

    <!-- Tab栏 -->
    <view class="tab-container">
      <scroll-view show-scrollbar="false" class="tab-scroll" scroll-x="true" >
        <view class="tab-list">
          <view 
            v-for="(tab, index) in tabs" 
            :key="index" 
            class="tab-item" 
            :class="{ active: activeTab === index }"
            @click="switchTab(index)"
          >
            {{ tab.title }}
          </view>
        </view>
      </scroll-view>
    </view>

    <!-- 轮播图 -->
    <view class="swiper-container">
      <uv-swiper 
        :list="bannerList" 
        keyName="image"
        height="121"
        radius="12"
        indicator
        ndicatorInactiveColor="#fff"
        :loading="false"
        indicatorMode="dot"
        indicatorActiveColor="#F95A01"
        @click="onBannerClick"
      ></uv-swiper>
    </view>

    <!-- 根据labelBooksData动态渲染书籍区块 -->
    <view 
      v-for="(labelData, labelIndex) in labelBooksData" 
      :key="labelIndex" 
      class="section"
    >
      <view class="section-header" @click="goLabel(labelData.labelInfo)">
        <text class="section-title">{{ labelData.labelInfo.title }}</text>
        <view class="section-more">
          <text>更多</text>
          <uv-icon name="arrow-right" size="14" color="#888"></uv-icon>
        </view>
      </view>
      
      <!-- 第一个label：今日更新样式 -->
      <scroll-view 
        v-if="labelIndex === 0" 
        show-scrollbar="false" 
        class="content-scroll" 
        scroll-x="true"
      >
        <view class="content-list">
          <view 
            v-for="(item, index) in labelData.books" 
            :key="index" 
            class="content-item"
            @click="goBook(item)"
          >
            <view class="item-cover">
              <image :src="item.booksImg || '/static/默认图片.png'" mode="aspectFill"></image>
            </view>
            <view class="item-info">
              <text class="item-title">{{ item.booksName }}</text>
              <text class="item-author">{{ item.booksAuthor }}</text>
              <view class="item-duration">
                <image src="/static/播放图标.png" class="item-icon" />
                <text>{{ item.duration }}</text>
              </view>
            </view>
          </view>
        </view>
      </scroll-view>
      
      <!-- 第二个label：推荐书籍样式 -->
      <scroll-view 
        v-else-if="labelIndex === 1" 
        show-scrollbar="false" 
        class="content-scroll" 
        scroll-x="true"
      >
        <view class="book-list">
          <view 
            v-for="(book, index) in labelData.books" 
            :key="index" 
            class="book-item"
            @click="goBook(book)"
          >
            <view class="book-cover">
              <image :src="book.booksImg || '/static/默认图片.png'" mode="aspectFill"></image>
              <view class="book-overlay">
                <view class="book-duration">
                  <image src="/static/闹钟图标.png" class="book-duration-icon" />
                  <text class="book-duration-text">{{ book.duration }}</text>
                </view>
                <view class="book-title">{{ book.booksName }}</view>
              </view>
            </view>
          </view>
        </view>
      </scroll-view>
      
      <!-- 第三个及以后的label：网格样式 -->
      <view v-else class="book-grid">
        <view 
          v-for="(book, index) in labelData.books" 
          :key="index" 
          class="book-grid-item"
          @click="goBook(book)"
        >
          <view class="book-grid-cover">
            <image :src="book.booksImg || '/static/默认图片.png'" mode="aspectFill"></image>
          </view>
          <view class="book-grid-info">
            <text class="book-grid-title">{{ book.booksName }}</text>
            <view class="book-grid-meta">
              <text class="book-grid-grade">{{ book.categoryName }}/</text>
              <image src="/static/播放图标.png" class="book-grid-duration-icon" />
              <text class="book-grid-duration">{{ book.duration }}</text>
            </view>
          </view>
        </view>
      </view>
    </view>

    <!-- 推荐内容列表 -->
    <view class="section">
      <view class="recommend-list">
        <view 
          @click="goPlan(item.id, item.type)"
          v-for="(item, index) in recommendList" 
          :key="index" 
          class="recommend-item"
        >
          <image :src="item.img" mode="aspectFill" class="recommend-image"></image>
        </view>
      </view>
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      // Tab数据
      tabs: [ ],
      activeTab: 0,
      
      // 轮播图数据
      bannerList: [

      ],

      // 书籍分类
      labels: [
        
      ],
      
      // 根据label获取的书籍数据（二维数组）
      labelBooksData: [],
      

       
       // 推荐列表数据
       recommendList: [
         
       ]
    }
  },
  
  methods: {
    // 切换Tab
    async switchTab(index) {
      this.activeTab = index
      await this.getBooksByLabels()
    },
    
    // 轮播图点击事件
    onBannerClick(index) {
      console.log('点击轮播图:', index)
      // 这里可以添加跳转逻辑
    },
    // 跳转计划定制
    goPlan(id, type) {
      uni.navigateTo({
        url: '/subPages/home/plan?id=' + id + '&type=' + type
      })
    },
    goSearch() {
      uni.navigateTo({
        url: '/subPages/home/search'
      })
    },
    goBook(book) {
      uni.navigateTo({
        url: '/subPages/home/directory?id=' + book.id
      })
    },
    async getBanner() {
      const bannerRes = await this.$api.home.getBanner()
      if (bannerRes.code === 200){
        this.bannerList = bannerRes.result.map(item => ({
            image: item.img,
            title: item.title   
        }))
      }
    },
    async getSignup() {
      const signupRes = await this.$api.home.getLink()
      if (signupRes.code === 200){
        this.recommendList = signupRes.result.map(item => ({
          img: item.img,
          id: item.id,
          type: item.type
        }))
      }
    },
    // 获取书籍分类
    async getCategory() {
      const categoryRes = await this.$api.book.category()
      if (categoryRes.code === 200){
        this.tabs = categoryRes.result.map(item => ({
            title:item.title,
            id: item.id
        }))
      }
    },
    // 获取书籍标签
    async getLabel() {
      const labelRes = await this.$api.book.label()
      if (labelRes.code === 200){
        this.labels = labelRes.result.map(item => ({
            title:item.lable,
            id: item.id
        }))
      }
    },

    
    // 根据label数组获取书籍数据
    async getBooksByLabels() {
      if (!this.labels || this.labels.length === 0) {
        console.log('labels数据为空，无法获取书籍')
        return
      }
      
      try {
        // 创建请求数组，每个label发起一次请求
        const requests = this.labels.map(label => 
          this.$api.book.list({
            label: label.id,
            pageNo: 1,
            pageSize: 6,
            category: this.tabs[this.activeTab].id
          }, false)
        )
        
        // 并发执行所有请求
        const responses = await Promise.all(requests)
        
        // 创建二维数组存储结果
        this.labelBooksData = responses.map((response, index) => {
          if (response.code === 200) {
            return {
              labelInfo: this.labels[index],
              books: response.result.records || []
            }
          } else {
            console.error(`获取label ${this.labels[index].title} 的书籍失败:`, response)
            return {
              labelInfo: this.labels[index],
              books: []
            }
          }
        })
        
        console.log('根据label获取的书籍数据:', this.labelBooksData)
      } catch (error) {
        console.error('获取书籍数据失败:', error)
        this.labelBooksData = []
      }
    },
    goLabel(label){
      uni.navigateTo({
        url: '/subPages/home/search?label=' + label.id
      })
    }
  },

  async onShow() {
    // 先获取基础数据
    await Promise.all([this.getBanner(), this.getSignup(), this.getCategory(), this.getLabel()])
    
    // 根据label数据获取对应的书籍
    await this.getBooksByLabels()
  }
}
</script>

<style lang="scss" scoped>
.home-container {
  background: #fff;
  min-height: 100vh;
  padding-bottom: 80rpx;
}

// 顶部搜索栏
.header {

  display: flex;
  align-items: center;
  padding: 6rpx 32rpx;
  background: #fff;
  
  .search-container {
    flex: 1;
  }

}

// Tab栏
.tab-container {
  background: #fff;
  // border-bottom: 1px solid #f0f0f0;
  
  top: 0;
  left: 0;
  right: 0;
  z-index: 999;
  .tab-scroll {
    white-space: nowrap;
    
    .tab-list {
      display: flex;
      padding: 0 20rpx;
      
      .tab-item {
        flex-shrink: 0;
        padding: 20rpx 20rpx;
        font-size: 32rpx;
        color: #666;
        position: relative;
        
        &.active {
          color: $primary-text-color;
          font-weight: 700;
          
          &::after {
            content: '';
            position: absolute;
            bottom: 0;
            left: 50%;
            transform: translateX(-50%);
            width: 22rpx;
            height: 4rpx;
            background: $primary-text-color;
            border-radius: 2rpx;
          }
        }
      }
    }
  }
}

// 轮播图容器
.swiper-container {
  margin: 20rpx;
  border-radius: 12rpx;
  overflow: hidden;
}

// 内容区块
.section {
  margin-top: 40rpx;
  
  .section-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 0 30rpx ;
    margin-bottom: 24rpx;
    .section-title {
      font-size: 36rpx;
      // font-weight: 600;
      color: $primary-text-color;
    }
    
    .section-more {
      display: flex;
      align-items: center;
      gap: 4rpx;
      
      text {
        font-size: 24rpx;
        color: $secondary-text-color;
      }
    }
  }
  
  .content-scroll {
    white-space: nowrap;
  }
}

// 今日更新列表
.content-list {
  display: flex;
  padding: 0 30rpx;
  gap: 32rpx;
  
  .content-item {
    flex-shrink: 0;
    width: 602rpx;
    height: 212rpx;
    display: flex;
    align-items: center;
    background: #F8F8F8;
    padding: 16rpx;
    border-radius: 16rpx;
    gap: 16rpx;
    .item-cover {
      width: 136rpx;
      height: 200rpx;
      border-radius: 16rpx;
      // overflow: hidden;
      
      image {
        width: 136rpx;
      height: 200rpx;
      }
    }
    
    .item-info {
      // padding-top: 20rpx;
      gap: 16rpx;
      display: flex;
      flex-direction: column;
      .item-title {
        
        font-size: 32rpx;
        font-weight: 700;
        color: $primary-text-color;
        letter-spacing: 0;
        line-height: 48rpx;
        // margin-bottom: 12rpx;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
      }
      
      .item-author {
        
        font-size: 24rpx;
        color: $secondary-text-color;
        // margin-bottom: 8rpx;
        letter-spacing: 0;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
      }
      
      .item-duration {
        gap: 12rpx;
        display: flex;
        align-items: center;
        font-size: 22rpx;
        letter-spacing: 0;
        color: $secondary-text-color;
        .item-icon{
          width: 22rpx;
          height: 25rpx;
        }
      }
    }
  }
}

// 推荐书籍列表
.book-list {
  display: flex;
  padding: 0 30rpx;
  gap: 32rpx;
  
  .book-item {
    flex-shrink: 0;
    width: 270rpx;
    // border-radius: 16rpx;
    .book-cover {
      width: 100%;
      height: 360rpx;
      border-radius: 16rpx;
      overflow: hidden;
      position: relative;
      
      image {
        width: 100%;
        height: 100%;
      }
      

      .book-overlay {
        position: absolute;
        bottom: 0;
        left: 0;
        right: 0;
        width: 100%;
        height: 140rpx;
        padding-top: 4rpx;
        padding-right: 16rpx;
        padding-bottom: 8rpx;
        padding-left: 16rpx;
        backdrop-filter: blur(5px);
        box-sizing: border-box;
        background: #00000066;
        padding: 20rpx 16rpx 8rpx;
        // gap: 26rpx;

        .book-duration{
          display: flex;
          gap: 8rpx;
          
          &-icon{
            width: 24rpx;
            height: 24rpx;
          }
          &-text{
            font-size: 20rpx;
            color: #DCDCDC;
          }
        }

        .book-title {
          margin-top: 10rpx;
          max-width: 220rpx;
          font-size: 24rpx;
          line-height: 1.4;
          color: #fff;

          // max-height: 68rpx;        /* = line-height * 2（34rpx * 2）作为保险 */
          display: -webkit-box;
          -webkit-box-orient: vertical;
          -webkit-line-clamp: 2; /* 关键：显示两行，超过两行才省略 */
          overflow: hidden;
          word-break: break-word; /* 长单词也能断行 */
          white-space: normal;      /* 允许换行 */
        }
        
      }
    }
    
  }
}

// 书籍网格布局
.book-grid {
  display: flex;
  flex-wrap: wrap;
  padding: 0 30rpx;
  gap: 32rpx;
  
  .book-grid-item {
    width: 208rpx;
    display: flex;
    flex-direction: column;
    
    .book-grid-cover {
      box-shadow: 0px 4px 4px 0px #C0BCBA75;

      width: 100%;
      height: 278rpx;
      border-radius: 16rpx;
      overflow: hidden;
      margin-bottom: 16rpx;
      
      image {
        width: 100%;
        height: 100%;
      }
    }
    
    .book-grid-info {
      padding: 6rpx;
      .book-grid-title {
        font-size: 28rpx;
        font-weight: 700;
        color: $primary-text-color;
        margin-bottom: 14rpx;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
      }
      
      .book-grid-meta {
        display: flex;
        align-items: center;
        // gap: 16rpx;
        .book-grid-duration-icon {
          width: 24rpx;
          height: 24rpx;
          margin-right: 12rpx;
        }
        .book-grid-grade {
          font-size: 24rpx;
          color: $secondary-text-color;
          margin-right: 8rpx;
        }
        
        .book-grid-duration {
          font-size: 24rpx;
          color: $secondary-text-color;
        }
      }
    }
  }
}

// 推荐列表样式
.recommend-list {
  padding: 0 30rpx;
  
  .recommend-item {
    width: 100%;
    height: 200rpx;
    margin-bottom: 48rpx;
    border-radius: 32rpx;
    overflow: hidden;
    
    &:last-child {
      margin-bottom: 0;
    }
    
    .recommend-image {
      width: 100%;
      height: 100%;
    }
  }
}
</style>
