import { get } from '@/utils/http'
import { SearchSuggest, SearchType, Pagination } from '@/interface'

interface SearchApiResult {
  [SearchType.SONG]: {
    songs: SearchSuggest['songs']
    songCount: number
  }
  [SearchType.PLAY_LIST]: {
    playlists: SearchSuggest['playlists']
    playlistCount: number
  }
  [SearchType.ALBUM]: {
    albums: SearchSuggest['albums']
    albumCount: number
  }
  [SearchType.ARTIST]: {
    artists: SearchSuggest['artists']
    artistCount: number
  }
  [SearchType.LYRICS]: {
    songs: SearchSuggest['lyrics']
    songCount: number
  }
}

export const search = async <T extends keyof SearchApiResult>(
  key: string,
  type: T,
  pagination: Pagination
): Promise<SearchApiResult[T]> => {
  const songs = await get<{
    result: SearchApiResult[T]
  }>('/api/search', {
    keywords: key,
    type: type,
    ...pagination
  })

  return songs.result
}

export const searchSuggest = async (key: string): Promise<SearchSuggest> => {
  const data = await get<{ result: SearchSuggest }>('/api/search/suggest', {
    keywords: key
  })
  return data.result
}