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

/**
 * 健康模块列表页通用逻辑 composable
 * 
 * @param {Function} listApi - 列表查询API函数，接收 { pageSize, pageNum, ...queryParams }
 * @param {Object} options - 可选配置
 * @param {number} options.pageSize - 每页数量，默认 10
 * @param {Function} options.onLoadCallback - onLoad 时额外执行的回调
 * @param {Function} options.transformRows - 自定义数据转换函数
 * @returns {Object}
 */
export function useHealthList(listApi, options = {}) {
  const { pageSize = 10, onLoadCallback = null, transformRows = null } = options

  const pageNum = ref(1)
  const listData = ref([])
  const isShow = ref(false)
  const status = ref('loadmore')

  /**
   * 获取列表数据
   * @param {Object} queryParams - 查询参数
   */
  function getList(queryParams = {}) {
    status.value = 'loading'
    listApi({ pageSize, pageNum: pageNum.value, ...queryParams })
      .then(res => {
        const rows = transformRows ? transformRows(res) : (res.rows || [])
        listData.value = listData.value.concat(rows)
        if (listData.value.length < res.total) {
          status.value = 'loadmore'
        } else {
          status.value = 'nomore'
        }
      })
      .catch(() => {
        status.value = 'nomore'
      })
  }

  /**
   * 加载更多
   * @param {Object} queryParams - 查询参数
   */
  function loadmore(queryParams = {}) {
    pageNum.value += 1
    if (status.value === 'loadmore') {
      getList(queryParams)
    }
  }

  /**
   * 重置列表并重新加载
   * @param {Object} queryParams - 查询参数
   */
  function resetList(queryParams = {}) {
    pageNum.value = 1
    listData.value = []
    getList(queryParams)
  }

  /**
   * 初始化列表页生命周期
   * @param {Function} getQueryParams - 返回当前查询参数的函数
   */
  function initLifecycle(getQueryParams) {
    onLoad(() => {
      if (onLoadCallback) onLoadCallback()
      getList(getQueryParams ? getQueryParams() : {})
    })

    onShow(() => {
      if (isShow.value) {
        resetList(getQueryParams ? getQueryParams() : {})
        isShow.value = false
      }
    })
  }

  /**
   * 通用删除处理
   * @param {Object} item - 要删除的项
   * @param {Function} deleteApi - 删除API函数
   * @param {Function} getQueryParams - 返回当前查询参数的函数
   */
  function handleDeleteAction(item, deleteApi, getQueryParams) {
    uni.showModal({
      title: '确认删除',
      content: '确定要删除这条记录吗？',
      confirmText: '删除',
      cancelText: '取消',
      confirmColor: '#f5576c',
      cancelColor: '#909399',
      success: function (res) {
        if (res.confirm) {
          deleteApi(item.id).then(() => {
            uni.showToast({ title: '删除成功', icon: 'success' })
            resetList(getQueryParams ? getQueryParams() : {})
          })
        }
      }
    })
  }

  /**
   * 标记进入编辑/新增页面，返回时刷新
   */
  function markForRefresh() {
    isShow.value = true
  }

  return {
    pageNum,
    listData,
    isShow,
    status,
    getList,
    loadmore,
    resetList,
    initLifecycle,
    handleDeleteAction,
    markForRefresh
  }
}
