<!--
  -   This file is a part of the SteamWar software.
  -
  -   Copyright (C) 2023 SteamWar.de-Serverteam
  -
  -   This program is free software: you can redistribute it and/or modify
  -   it under the terms of the GNU Affero General Public License as published by
  -   the Free Software Foundation, either version 3 of the License, or
  -   (at your option) any later version.
  -
  -   This program is distributed in the hope that it will be useful,
  -   but WITHOUT ANY WARRANTY; without even the implied warranty of
  -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  -   GNU Affero General Public License for more details.
  -
  -   You should have received a copy of the GNU Affero General Public License
  -   along with this program.  If not, see <https://www.gnu.org/licenses/>.
  -->

<script lang="ts">
    import {createEventDispatcher} from "svelte";
    import {schemRepo} from "@repo/schem.ts";
    import SWModal from "@components/styled/SWModal.svelte";
    import {t} from "astro-i18n";

    const dispatch = createEventDispatcher();

    interface Props {
        open?: boolean;
    }

    let {open = $bindable(false)}: Props = $props();

    async function upload(e: Event) {
        e.stopPropagation();
        if (uploadFile == null) {
            error = "dashboard.schematic.errors.noFile";
            return;
        }
        let file = uploadFile[0];

        let name = file.name;

        let type = name.split(".").pop();

        if (type !== "schem" && type !== "schematic") {
            error = "dashboard.schematic.errors.invalidEnding";
            return;
        }

        let content = await file.arrayBuffer();

        let b64 = btoa(String.fromCharCode.apply(null, new Uint8Array(content)));

        try {
            await $schemRepo.uploadSchematic(name, b64);

            open = false;
            value = "";
            dispatch("reset");
        } catch (e) {
            error = "dashboard.schematic.errors.upload";
        }
    }

    function reset(e: Event) {
        e.stopPropagation();
        open = false
        value = "";
    }

    let uploadFile: FileList | null = $state(null);
    let value = $state("");
    let error = $state(null)
</script>

<SWModal title={t("dashboard.schematic.title")} bind:open>
    <form>
        <label for="schem-upload">{t("dashboard.schematic.title")}</label>
        <input type="file" id="schem-upload" bind:files={uploadFile} class="overflow-ellipsis" bind:value accept=".schem, .schematic"/>
        {#if error !== null}
            <p class="text-red-400">{t(error)}</p>
        {/if}
    </form>
    {#snippet footer()}
        <button class="btn" onclick={upload}>{t("dashboard.schematic.upload")}</button>
        <button class="btn btn-gray" onclick={reset}>{t("dashboard.schematic.cancel")}</button>
    {/snippet}
</SWModal>