import { get } from '@/utils/http'
import {
SongsDetail,
PlayList,
Albums,
Song,
PlaySource
} from '@/interface/index'
import { SubscribeActionType } from '@/shared/subscribe'
export const getSongUrl = async <T>(
id: number | number[],
source: PlaySource[],
br: number
): Promise<T> => {
const data = await get<{ data: T }>('/api/song/url/v1', {
id: Array.isArray(id) ? id.join(',') : id,
br: br,
source: source?.join(','),
level: 'lossless'
})
return data.data
}
export const getSongDetail = async (
id: number | number[]
): Promise<SongsDetail[]> => {
const data = await get<{ songs: SongsDetail[] }>('/api/song/detail', {
ids: typeof id === 'number' ? id : id.join(',')
})
return data.songs
}
export const getLyric = async (id: number): Promise<string> => {
const data = await get<SongsDetail>('/api/lyric', {
id
})
return data.lrc.lyric
}
export const getPlayList = async (id: number): Promise<PlayList> => {
const data = await get<{ playlist: PlayList }>('/api/playlist/detail', {
id
})
return data.playlist
}
export const getAlbumList = async (
id: number
): Promise<{ songs: SongsDetail[]; album: Albums }> => {
const data = await get<{ songs: SongsDetail[]; album: Albums }>(
'/api/album',
{
id
}
)
return data
}
export const userPlaylist = async (id: string | number): Promise<Song[]> => {
const data = await get<{ playlist: Song[] }>('/api/user/playlist', {
uid: id
})
return data.playlist
}
export const userSubscribeCount = async () => {
return get('/api/user/subcount')
}
export const subscribePlaylist = async (
type: SubscribeActionType,
id: number | string
) => {
return get('/api/playlist/subscribe', {
t: type,
id: id
})
}
export const subscribeSingle = async (
type: SubscribeActionType,
pid: number | string,
id: number[] | string[]
) => {
return get('/api/playlist/tracks', {
op: type === '1' ? 'add' : 'del',
pid,
tracks: id.join(',')
})
}