Vue.createApp({
    data() {
        return {
            file: "",
            content: [],
            parsed: false,
            imported: 0,
            disabled: true,
            state: "default",
        };
    },
    created() {},
    destroyed() {},
    methods: {
        handleFileUpload(event) {
            const { files } = event.target;
            const [csv] = files;

            this.file = csv;

            this.file = csv;
            // this.parseFile();

            const reader = new FileReader();
            reader.onload = (content) => {
                this.content = [];
                this.state = "parse";
                const lines = content.target.result.split(/\r\n|\n/);
                for (let line = 1; line < lines.length - 1; line += 1) {
                    this.parseLine(lines[0], lines[line]);
                }

                this.state = "default";
                this.disabled = false;
            };

            reader.readAsText(csv);
        },
        parseLine(header, line) {
            const row = {};
            let currentHeaderIndex = 0;

            let separant = ",";
            let value = "";
            for (let i = 0; i < line.length; i += 1) {
                const char = line[i];

                if (char !== separant) {
                    if (char === '"') {
                        separant = '"';
                    } else {
                        value += char;
                    }
                } else if (char === '"') {
                    separant = ",";
                } else {
                    row[header.split(",")[currentHeaderIndex]] = value;
                    currentHeaderIndex += 1;
                    value = "";
                }
            }
            this.content.push(row);
        },
        async addOne(index) {
            const { Artist, Title, release_id } = this.content[index];

            try {
                const res = await axios.get(
                    `/api/v1/albums?discogsId=${release_id}`
                );

                if (res.status === 204) {
                    await axios.post("/api/v1/albums", {
                        discogsId: release_id,
                        share: false,
                    });
                }

                this.imported += 1;
                if (this.content.length > index + 1) {
                    await this.addOne(index + 1);
                }
            } catch (err) {
                showToastr(
                    `Impossible d'ajouter l'album ${Title} de ${Artist}`
                );

                return false;
            }

            return true;
        },
        async importCollection(event) {
            event.preventDefault();

            this.disabled = true;
            this.state = "submit";
            this.imported = 0;

            const imported = await this.addOne(0);

            this.disabled = false;
            this.state = imported ? "done" : "default";
        },
    },
}).mount("#importer");