import { ref, reactive } from 'vue'
import { onShow, onReachBottom } from '@dcloudio/uni-app'

export const usePageList = (apiFun, defaultQueryParams) => {

  const queryParams = reactive({
    pageNo: 1,
    pageSize: 10,
    ...defaultQueryParams
  })

  const list = ref([])
  const total = ref(0)

  const fetchData = async () => {
    try {
      const res = await apiFun(queryParams)

      if (res.code === 200) {
        return res.data
      }

      return { list: [], total: 0 }
    } catch (err) {
      return { list: [], total: 0 }
    }
  }

  const getData = async () => {
    queryParams.pageNo = 1
    const { list: _list, total: _total } = await fetchData()

    list.value = _list
    total.value = _total
  }

  const getMore = async () => {
    if (list.value.length >= total.value) {
      return
    }

    queryParams.pageNo++
    const { list: _list } = await fetchData()

    list.value = list.value.concat(_list)
  }
  
  onShow(() => {
    console.log('--onShow')
  
    getData()
  })

  onReachBottom(() => {
    console.log('--onReachBottom')
  
    getMore()
  })

  return {
    queryParams,
    list,
    total,
    getData,
    getMore,
  }

}
