if (typeof item !== "undefined") {
    Vue.createApp({
        data() {
            return {
                // eslint-disable-next-line no-undef
                item,
                tracklist: [],
                identifiers: [],
                modalIsVisible: false,
                identifiersMode: "preview",
                identifiersPreviewLength: 16,
                preview: null,
                index: null,
                showModalDelete: false,
            };
        },
        created() {
            this.setTrackList();
            this.setIdentifiers();

            window.addEventListener("keydown", this.changeImage);
        },
        destroyed() {
            window.removeEventListener("keydown", this.changeImage);
        },
        methods: {
            setIdentifiers() {
                this.identifiers = [];

                const max =
                    this.identifiersMode === "preview" &&
                    this.item.identifiers.length > this.identifiersPreviewLength
                        ? this.identifiersPreviewLength
                        : this.item.identifiers.length;

                for (let i = 0; i < max; i += 1) {
                    this.identifiers.push(this.item.identifiers[i]);
                }
            },
            setTrackList() {
                this.tracklist = [];
                let subTrack = {
                    type: null,
                    title: null,
                    tracks: [],
                };
                for (let i = 0; i < this.item.tracklist.length; i += 1) {
                    const {
                        type_,
                        title,
                        position,
                        duration,
                        artists,
                        extraartists,
                    } = this.item.tracklist[i];

                    if (type_ === "heading") {
                        if (subTrack.type) {
                            this.tracklist.push(subTrack);
                            subTrack = {
                                type: null,
                                title: null,
                                tracks: [],
                            };
                        }

                        subTrack.type = type_;
                        subTrack.title = title;
                    } else {
                        subTrack.tracks.push({
                            title,
                            position,
                            duration,
                            extraartists,
                            artists,
                        });
                    }
                }
                this.tracklist.push(subTrack);
            },
            setImage() {
                this.preview = this.item.images[this.index].uri;
            },
            showGallery(event) {
                const item =
                    event.target.tagName === "IMG"
                        ? event.target.parentElement
                        : event.target;

                const { index } = item.dataset;

                this.index = Number(index);
                this.modalIsVisible = true;

                this.setImage();
            },
            toggleModal() {
                this.modalIsVisible = !this.modalIsVisible;
            },
            previous() {
                this.index =
                    this.index > 0
                        ? this.index - 1
                        : this.item.images.length - 1;
                this.setImage();
            },
            next() {
                this.index =
                    this.index + 1 === this.item.images.length
                        ? 0
                        : this.index + 1;
                this.setImage();
            },
            changeImage(event) {
                const direction = event.code;

                if (
                    this.modalIsVisible &&
                    ["ArrowRight", "ArrowLeft", "Escape"].indexOf(direction) !==
                        -1
                ) {
                    switch (direction) {
                        case "ArrowRight":
                            return this.next();
                        case "ArrowLeft":
                            return this.previous();
                        default:
                            this.modalIsVisible = false;
                            return true;
                    }
                }

                return true;
            },
            showAllIdentifiers() {
                this.identifiersMode = "all";
                this.setIdentifiers();
            },
            showLessIdentifiers() {
                this.identifiersMode = "preview";
                this.setIdentifiers();

                document
                    .querySelector("#identifiers")
                    .scrollIntoView({ behavior: "smooth" });
            },
            showConfirmDelete() {
                this.toggleModalDelete();
            },
            toggleModalDelete() {
                this.showModalDelete = !this.showModalDelete;
            },
            updateItem() {
                showToastr("Mise à jour en cours…", true);
                axios
                    .patch(`/api/v1/albums/${this.item._id}`)
                    .then((res) => {
                        showToastr("Mise à jour réalisée avec succès", true);
                        this.item = res.data;

                        this.setTrackList();
                        this.setIdentifiers();
                        this.showLessIdentifiers();
                    })
                    .catch((err) => {
                        showToastr(
                            err.response?.data?.message ||
                                "Impossible de mettre à jour cet album",
                            false
                        );
                    });
            },
            deleteItem() {
                axios
                    .delete(`/api/v1/albums/${this.item._id}`)
                    .then(() => {
                        window.location.href = "/ma-collection";
                    })
                    .catch((err) => {
                        showToastr(
                            err.response?.data?.message ||
                                "Impossible de supprimer cet album"
                        );
                    })
                    .finally(() => {
                        this.toggleModalDelete();
                    });
            },
            goToArtist() {
                return "";
            },
        },
    }).mount("#ma-collection-details");
}