import request from "../../handlers/request"

export default class PlaylistsModel {
    static get api_instance() {
        return globalThis.__comty_shared_state.instances["music"]
    }

    static refreshTrackCache = async (track_id) => {
        if (!track_id) {
            throw new Error("Track ID is required")
        }

        const { data } = await request({
            instance: PlaylistsModel.api_instance,
            method: "POST",
            url: `/tracks/${track_id}/refresh-cache`,
        })

        return data
    }

    static putPlaylist = async (payload) => {
        if (!payload) {
            throw new Error("Payload is required")
        }

        const { data } = await request({
            instance: PlaylistsModel.api_instance,
            method: "PUT",
            url: `/playlists/playlist`,
            data: payload,
        })

        return data
    }

    static deletePlaylist = async (id) => {
        if (!id) {
            throw new Error("ID is required")
        }

        const { data } = await request({
            instance: PlaylistsModel.api_instance,
            method: "DELETE",
            url: `/playlist/${id}`,
        })

        return data
    }

    static getTrack = async (id) => {
        const { data } = await request({
            instance: PlaylistsModel.api_instance,
            method: "GET",
            url: `/tracks/${id}/data`,
        })

        return data
    }

    static getTracks = async (ids) => {
        const { data } = await request({
            instance: PlaylistsModel.api_instance,
            method: "GET",
            url: `/tracks/many`,
            params: {
                ids,
            }
        })

        return data
    }

    static getPlaylist = async (id) => {
        const { data } = await request({
            instance: PlaylistsModel.api_instance,
            method: "GET",
            url: `/playlists/${id}/data`,
        })

        return data
    }

    static search = async (keywords) => {
        const { data } = await request({
            instance: PlaylistsModel.api_instance,
            method: "GET",
            url: `/playlists/search`,
            params: {
                keywords,
            }
        })

        return data
    }

    static getMyReleases = async (keywords) => {
        const { data } = await request({
            instance: PlaylistsModel.api_instance,
            method: "GET",
            url: `/playlists/self`,
            params: {
                keywords,
            }
        })

        return data
    }
}