import { useState, useEffect } from 'react'
import withLayout from '@/layout'
import { ScrollView } from '@tarojs/components'
import Disclaimer from '@/components/Disclaimer'
import Poster from '@/components/Poster'
import { fetch } from '@/utils/request'
import { API_ITEMS_DETAIL } from '@/constants/api'
import useParams from '@/utils/hooks/useParams'
import useShare from '@/utils/hooks/useShare'
import usePoster from '@/utils/hooks/usePoster'
import { savePoint } from '@/services/common'
import { addItemUv } from '@/services/item'
import DetailBottom from './components/DetailBottom/index'
import BuildingDetailBanner from './components/BuildingDetailBanner/index'
import BasicInfo from './components/BasicInfo/index'
import SpecialPriceHouse from './components/SpecialPriceHouse/index'
import ProjectDynamic from './components/ProjectDynamic/index'
import PropertyConsultant from './components/PropertyConsultant/index'
import Periphery from './components/Periphery/index'
import HouseTypeIntro from './components/HouseTypeIntro/index'
import MarketingActivity from './components/MarketingActivity/index'
import LivingActivity from './components/LivingActivity/index'
import News from './components/News/index'
import Pictures from './components/Pictures/index'

import './index.scss'

export default withLayout((props) => {
  const { router, person, shareContent, trackData, page, setNavigationBarTitle } = props
  const { id } = router.params

  const [showPoster, setShowPoster] = useState(false)
  const [DetailInfo, setDetailInfo] = useState({})
  const [PictureList, setPictureList] = useState([])

  // 本页面分享或者海报参数
  const paramsRef = useParams({id, buildingId: id, person, from: `${page.type}_share`})

  const fullTrackData = { ...trackData, buildingId: id }

  // 分享
  useShare({
      title: shareContent.shareContentTitle || DetailInfo?.buildingName,
      path: `${router.path}?${paramsRef.current}`,
      image: shareContent.shareContentImg,
    },
    fullTrackData,
  )

  useEffect(() => {
    if(trackData.eventType && DetailInfo.buildingId) {
      savePoint({
        ...trackData,
        event: 'detail',
        eventType: 'building',
        buildingId: id,
        targetType: 'building'
      })
      addItemUv(id)
    }
  }, [trackData, DetailInfo])

  // 海报
  const posterData = usePoster(person, DetailInfo?.poster, router, paramsRef)

  useEffect(() => {
    // 获取楼盘信息
    fetch({ url: `${API_ITEMS_DETAIL}/${id}`, spin: true }).then((res) => {
      setDetailInfo(res || {})
      setNavigationBarTitle(res?.buildingName)
      
      if (res?.buildingApartment) {
        const List = res.buildingApartment.filter(item => item.apartmentType === 'photo')
        setPictureList(List.filter(item => item.buildingImgList.length > 0))
      }

    }).catch((err) => {
      console.error(err)
    })

  }, [id])

  // 户型图
  const houseTypeImages = (DetailInfo?.buildingApartment || []).filter(x => x.apartmentType === 'apart')

  return (
    <view className='Page buildingDetail flex-v'>
      <view className='flex-item'>
        <view>
          <ScrollView scroll-y>
            <view className='PageContent'>

              {/* banner */}
              <view className='BannerContainer'>
                <view>
                  <view>
                    {
                      !!DetailInfo.buildingName &&
                      <BuildingDetailBanner Info={DetailInfo}></BuildingDetailBanner>
                    }
                  </view>
                </view>
              </view>

              {/* content */}
              <view className='DetailContent'>

                {/* 基本信息 */}
                <view className='BasicInfo'>
                  <BasicInfo Info={DetailInfo} trackData={fullTrackData}></BasicInfo>
                </view>

                {/* 特价房源 */}
                {
                  (DetailInfo?.specialRoomList || []).length > 0 &&
                  <view className='SpecialPriceHouse' style={{minHeight: 0}}>
                    <SpecialPriceHouse List={DetailInfo?.specialRoomList}></SpecialPriceHouse>
                  </view>
                }

                {/* 项目动态 */}
                {
                  (DetailInfo?.trendList || []).length > 0 &&
                  <view className='ProjectDynamic' style={{minHeight: 0}}>
                    <ProjectDynamic List={DetailInfo?.trendList}></ProjectDynamic>
                  </view>
                }

                {/* 置业顾问 */}
                {
                  (DetailInfo?.consultants || []).length > 0 &&
                  <view className='PropertyConsultant' style={{minHeight: 0}}>
                    <PropertyConsultant Info={DetailInfo}></PropertyConsultant>
                  </view>
                }

                {/* 位置及周边 */}
                <view className='Periphery' style={{minHeight: 0}}>
                  <Periphery Info={DetailInfo}></Periphery>
                </view>

                {/* 户型介绍 */}
                {
                  (houseTypeImages.length || []) > 0 &&
                  <view className='HouseTypeIntro' style={{minHeight: 0}}>
                    <HouseTypeIntro Info={houseTypeImages}></HouseTypeIntro>
                  </view>
                }

                {/* 营销活动 */}
                <view className='MarketingActivity' style={{minHeight: 0}}>
                  <MarketingActivity Info={DetailInfo}></MarketingActivity>
                </view>

                {/* 直播活动 */}
                {
                  (DetailInfo?.liveActivityList || []).length > 0 &&
                  <view className='LivingActivity' style={{minHeight: 0}}>
                    <LivingActivity Info={DetailInfo}></LivingActivity>
                  </view>
                }

                {/* 新鲜资讯 */}
                <view className='News' style={{minHeight: 0}}>
                  <News Info={DetailInfo}></News>
                </view>

                {/* 相册 */}
                {
                  (PictureList || []).length > 0 &&
                  <view className='Pictures'>
                    <Pictures List={PictureList}></Pictures>
                  </view>
                }

                {/* 免责声明 */}
                <Disclaimer />
              </view>

            </view>
          </ScrollView>
        </view>
      </view>

      <view className='PageBottom'>
        <DetailBottom Info={DetailInfo} onPoster={() => setShowPoster(true)}></DetailBottom>
      </view>

      <Poster
        show={showPoster}
        dataSource={posterData}
        onClose={() => setShowPoster(false)}
        onSuccess={() => setShowPoster(false)}
      />
    </view>
  )
})