import { Interval } from 'date-fns'
import { useContext } from 'react'
import { NetworkRequest, useNetwork } from '../components/useNetwork'
import { ArtistContext } from '../contexts/ArtistContext'
import { UserContext } from '../contexts/UserContext'
import { ChartTrackPosition } from '../types/types'
import { intervalDates, toQueryString } from '../util'
import { useCacheKey } from './useCacheKey'

interface MarketChartTrackPositionsResponse {
  chartTrackPositions: ChartTrackPosition[]
}

export function useMarketChartTrackPositions(
  chartGroup: string,
  countryCode: string,
  interval: Interval,
  onRetry?: () => void
): NetworkRequest<MarketChartTrackPositionsResponse> {
  const user = useContext(UserContext)
  const artist = useContext(ArtistContext)
  const { startDate, endDate } = intervalDates(interval)
  const query = toQueryString({
    startDate,
    endDate,
    chartGroup,
  })
  const path = `api/artists/${artist.sonyArtistId}/markets/${countryCode}/chart-track-positions?${query}`
  const response = useNetwork<MarketChartTrackPositionsResponse>(
    path,
    user,
    onRetry
  )

  useCacheKey(path)

  return response
}
