import findSpotifyId from "@services/findSpotifyId"
import { Track } from "@shared-classes/DbModels"
import axios from "axios"

const syncLyricsProvider = process.env.LYRICS_SYNC_PROVIDER || `https://spotify-lyric-api.herokuapp.com`
const canvasProvider = process.env.LYRICS_CANVAS_PROVIDER || `https://c_cdn-test.ragestudio.net/api/canvas`

export default async (track, { req }) => {
    if (typeof track !== "object") {
        throw new Error("Track must be an object")
    }

    if (!track._id) {
        throw new Error("Track must have an _id")
    }

    if (!track.lyricsEnabled) {
        throw new Error("Track lyrics are not enabled")
    }

    let lyricData = {
        syncType: null,
        lines: null,
        canvas_url: null,
    }

    if (!track.spotifyId) {
        if (!req.session) {
            throw new Error("Session not found and track has no spotify id")
        }

        const spotifyId = await findSpotifyId({
            title: track.title,
            artist: track.artist,
            sessionToken: req.sessionToken,
        }, { req })

        if (!spotifyId) {
            throw new Error("Track has no spotify id")
        }

        track.spotifyId = spotifyId

        await Track.findOneAndUpdate({
            _id: track._id.toString(),
        }, { spotifyId })
    }

    let { data } = await axios.get(`${syncLyricsProvider}/?trackid=${track.spotifyId}`)

    lyricData.syncType = data.syncType
    lyricData.lines = data.lines

    if (track.videoCanvas) {
        lyricData.canvas_url = track.videoCanvas
    } else {
        try {
            const { data } = await axios.get(`${canvasProvider}/${track.spotifyId}`)

            lyricData.canvas_url = data.canvas_url

            await Track.findOneAndUpdate({
                _id: track._id.toString(),
            }, {
                videoCanvas: data.canvas_url,
            })
        } catch (err) {
            //console.log(err.response.data)
        }
    }

    return lyricData
}