import { MusicRelease, User } from "@db_models"

const AllowedUpdateFields = [
    "title",
    "cover",
    "album",
    "artist",
    "type",
    "public",
    "list",
]

export default class Release {
    static async create(payload) {
        const release = new MusicRelease({
            user_id: payload.user_id,
            created_at: Date.now(),
            title: payload.title,
            cover: payload.cover,
            explicit: payload.explicit,
            type: payload.type,
            public: payload.public,
            list: payload.list,
            public: payload.public,
        })

        await release.save()

        return release
    }

    static async update(id, payload) {
        let release = await MusicRelease.findById(id).catch((err) => {
            return false
        })

        if (!release) {
            throw new OperationError(404, "Release not found")
        }

        if (release.user_id !== payload.user_id) {
            throw new PermissionError(403, "You dont have permission to edit this release")
        }

        for (const field of AllowedUpdateFields) {
            if (payload[field]) {
                release[field] = payload[field]
            }
        }

        release = await MusicRelease.findByIdAndUpdate(id, release)

        return release
    }

    static async fullfillItemData(release) {

        return release
    }
}