import { useContext } from 'react'
import { NetworkRequest, useNetwork } from '../components/useNetwork'
import { StreamingDsp } from '../Consts'
import { ArtistContext } from '../contexts/ArtistContext'
import { UserContext } from '../contexts/UserContext'
import { TrackAndStreams } from '../types/helpers'

import { intervalDates, toQueryString } from '../util'

export interface MarketTopTracksResponse {
  tracks: TrackAndStreams[]
}

export function useMarketTopTracks(
  countryCode: string,
  interval: Interval,
  dsp: StreamingDsp | 'all',
  onRetry?: () => void
): NetworkRequest<MarketTopTracksResponse> {
  const user = useContext(UserContext)
  const artist = useContext(ArtistContext)
  const { startDate, endDate } = intervalDates(interval)
  const query = toQueryString({
    startDate,
    endDate,
    dsp: dsp === 'all' ? null : dsp,
    countryCode: countryCode ?? null,
  })
  const path = `api/artists/${artist.sonyArtistId}/markets/${countryCode}/top-tracks?${query}`
  return useNetwork<MarketTopTracksResponse>(path, user, onRetry)
}
