import { useCallback, useRef, useState } from 'react'
import { usePolling } from '../../hooks/usePolling'
import { getScanJobsList, ScanJob } from '../../scanJobs/api'
 
export const usePollingScanJob = (
  defaultClusterId?: string,
  onlyRunning: boolean = true,
  _pageSize: number = 10
) => {
  const [scanJobs, setScanJobs] = useState<ScanJob[]>([])
  const [page, setPage] = useState(1)
  const [pageSize, setPageSize] = useState(_pageSize)
  const totalCountRef = useRef(0)
  const fetchJobs = useCallback(
    async (clusterId?: string) => {
      const res = await getScanJobsList({
        cluster_id: clusterId || defaultClusterId,
        page_num: page,
        page_size: pageSize,
      })
      totalCountRef.current = res.totalCount
      const data = res.data
      const running = data.filter(job => ['running', 'processing'].includes(job.status))
      setScanJobs(onlyRunning ? running : data)
      const hasRunning = running.length > 0
      setEnabled(hasRunning)
    },
    [onlyRunning, defaultClusterId, page, pageSize]
  )
  const { loading: runningLoading, setEnabled } = usePolling(fetchJobs, 1000, false)
 
  return {
    scanJobs,
    runningLoading,
    setEnabled,
    fetchJobs,
    setScanJobs,
    setPage,
    setPageSize,
    totalCount: totalCountRef.current,
    page,
    pageSize,
  }
}