import React from 'react';
import Taro from '@tarojs/taro';
import { View } from '@tarojs/components';
import VirtualList from '@tarojs/components/virtual-list';
import { Cell, Loading } from '@antmjs/vantui';
import useRequest from '@/utils/useRequest';
import { getBoundList } from '@/services/bind';
import Item from './Item';

const Row = (props) => {
  const { data, index } = props;
  const item = data[index];
  const onClick = () => Taro.navigateTo({ url: `/pages/index/index?id=${item.serialNo}` });

  return (
    <Item data={item} onClick={onClick} />
  );
}

export default (props) => {

  const [pageInfo, setPageInfo] = React.useState({ current: 0, size: 10, total: 0, page: 0 });
  const [list, setList] = React.useState([]);
  const [loading, request] = useRequest(getBoundList);

  const height = 500;
  const itemSize = 100;
  const dataLen = list.length;

  // 所有数据读取完毕
  const isFinished = pageInfo.current > 0 && pageInfo.current * pageInfo.size >= pageInfo.total;

  const queryData = (params) => {
    request(params).then(res => {
      const { records, ...page } = res;
      if (page.current === 1) {
        setList(records || []);
      } else {
        setList(list.concat(records || []));
      }
      setPageInfo(page);
    }, []);
  };

  const onScroll = ({scrollDirection, scrollOffset}) => {
    
    if (
      // 数据还有
      !isFinished &&
      // 避免重复加载数据
      !loading &&
      // 只有往前滚动我们才触发
      scrollDirection === 'forward' &&
      // 5 = (列表高度 / 单项列表高度)
      // 100 = 滚动提前加载量,可根据样式情况调整
      scrollOffset > ((dataLen - Math.floor(height / itemSize) ) * itemSize - 50)
    ) {
      queryData({ pageNum: pageInfo.current + 1 , pageSize: 6 })
    }
  }

  return (
    <View>
      <VirtualList
        height={height}
        itemData={list}
        itemCount={dataLen}
        itemSize={itemSize}
        width="100%"
        onScroll={onScroll}
      >
        {Row}
      </VirtualList>
      {
        loading && <Loading />
      }
      {
        isFinished && <View className="finish-tip">我是有底线的 ~</View>
      }
    </View>
  )
}