import { useContext } from 'react'

import { useGet } from '../components/Network'
import { ArtistContext } from '../contexts/ArtistContext'
import { UserContext } from '../contexts/UserContext'
import { TimeInterval } from '../types/TimeInterval'
import { TrackWithStreamsByDspAndDate } from '../types/types'
import { timeRangeDates } from '../util'
import { useNetwork } from './useNetwork'

export interface TracksScreenResponse {
  tracks: TrackWithStreamsByDspAndDate[]
}

export const cachedTracksScreenPaths: Set<string> = new Set()
export function useTracksScreenData(timeInterval: TimeInterval) {
  const user = useContext(UserContext)
  const artist = useContext(ArtistContext)
  const { startDate, endDate } = timeRangeDates(timeInterval)
  const path = `screens/artist/${artist.sonyArtistId}/tracks?startDate=${startDate}&endDate=${endDate}`
  cachedTracksScreenPaths.add(path)

  const { data, showToast, error, retry, refreshing } =
    useNetwork<TracksScreenResponse>(useGet(path, user))

  return { data, showToast, error, retry, refreshing }
}
