<!--
Copyright: Ankitects Pty Ltd and contributors
License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
-->
<script lang="ts">
    import { tick } from "svelte";
    import * as tr from "@generated/ftl";

    export let value: number[];

    let stringValue: string;
    let taRef: HTMLTextAreaElement;

    function updateHeight() {
        if (taRef) {
            taRef.style.height = "auto";
            // +2 for "overflow-y: auto" in case js breaks
            taRef.style.height = `${taRef.scrollHeight + 2}px`;
        }
    }

    $: {
        stringValue = render(value);
        tick().then(updateHeight);
    }

    function render(params: number[]): string {
        return params.map((v) => v.toFixed(4)).join(", ");
    }

    const validParamCounts = [0, 17, 19, 21];

    function update(e: Event): void {
        const input = e.target as HTMLTextAreaElement;
        const newValue = input.value
            .replace(/ /g, "")
            .split(",")
            .filter((e) => e)
            .map((v) => Number(v));

        if (validParamCounts.includes(newValue.length)) {
            value = newValue;
        } else {
            alert(tr.deckConfigInvalidParameters());
            input.value = stringValue;
        }
    }

    const UNLOCK_EDIT_COUNT = 3;
    let clickCount = 0;
    function onClick() {
        clickCount += 1;
        if (clickCount == UNLOCK_EDIT_COUNT) {
            alert(tr.deckConfigManualParameterEditWarning());
        }
    }
</script>

<svelte:window onresize={updateHeight} />

<textarea
    bind:this={taRef}
    value={stringValue}
    on:blur={update}
    class="w-100"
    placeholder={tr.deckConfigPlaceholderParameters()}
    readonly={clickCount < UNLOCK_EDIT_COUNT}
    on:click={onClick}
></textarea>

<style>
    textarea {
        resize: none;
        overflow-y: auto;
    }

    textarea:read-only {
        opacity: 0.75;
    }
</style>
