<script lang="ts">
    import {base_domain, CookieNames} from "$shared/lib/configuration";
    import {get_cookie, set_cookie} from "$shared/lib/helpers";
    import {onMount} from "svelte";

    type theme = "system"|"dark"|"light";

    export let show = false;
    export let glow = false;
    export let selection: theme = "system";
    export let size;
    let prefers = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
    onMount(() => {
        selection = get_cookie(CookieNames.theme) as theme;
        document.addEventListener("keydown", (e) => {
            if (e.code === "Escape") show = false;
        });
        document.addEventListener("click", (e: any) => {
            if (e.target.closest("[data-theme-switcher-element]") === null) show = false;
        });
    });
    let html = document.querySelector("html");

    window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", (event) => {
        prefers = event.matches ? "dark" : "light";
    });

    $: switch (selection || prefers) {
        case "system":
            html.dataset.theme = prefers;
            break;
        case "light":
            html.dataset.theme = "light";
            break;
        case "dark":
            html.dataset.theme = "dark";
            break;
    }

    function change(to: theme) {
        selection = to;
        set_cookie(CookieNames.theme, selection, base_domain());
    }
</script>

<div class="bg-light padding-x-xs padding-bottom-xs padding-top-xxxs radius-md {glow ? 'inner-glow shadow-xs' : ''}"
     class:is-hidden={!show}
     data-theme-switcher-element
     role="listbox">
    <div class="flex flex-wrap flex-column"
         role="group">
        <div class="margin-bottom-xs flex-grow">
            <span class="text-xs color-contrast-medium">Appearance</span>
        </div>
        <div class="flex gap-xs flex-row">
            <div class="ld-switch-popover__option"
                 aria-selected="{selection === 'dark' ? 'true' : 'false'}"
                 role="option">
                <figure class="radius-md inner-glow"
                        on:click={() => change("dark")}>
                    <svg id="Layer_1"
                         class="block radius-inherit"
                         data-name="Layer 1"
                         xmlns="http://www.w3.org/2000/svg"
                         width="70"
                         height="50"
                         viewBox="0 0 70 50">
                        <rect width="70"
                              height="50"
                              fill="#22232a"/>
                        <path d="M14,10H70V50H10V14A4,4,0,0,1,14,10Z"
                              fill="#5a5c63"/>
                        <circle cx="18"
                                cy="18"
                                r="3"
                                fill="#22232a"/>
                        <circle cx="27"
                                cy="18"
                                r="3"
                                fill="#22232a"/>
                        <circle cx="36"
                                cy="18"
                                r="3"
                                fill="#22232a"/>
                        <rect x="17"
                              y="28"
                              width="46"
                              height="3"
                              rx="1"
                              fill="#fafaff"/>
                        <rect x="17"
                              y="34"
                              width="46"
                              height="3"
                              rx="1"
                              fill="#fafaff"/>
                        <rect x="17"
                              y="40"
                              width="30"
                              height="3"
                              rx="1"
                              fill="#fafaff"/>
                    </svg>
                </figure>
                <div class="text-xs margin-top-xxxs padding-x-xxxxs">Dark</div>
            </div>
            <div class="ld-switch-popover__option"
                 aria-selected="{selection === 'light' ? 'true' : 'false'}"
                 role="option">
                <figure class="radius-md inner-glow"
                        on:click={() => change("light")}>
                    <svg id="Layer_1"
                         class="block radius-inherit"
                         data-name="Layer 1"
                         xmlns="http://www.w3.org/2000/svg"
                         width="70"
                         height="50"
                         viewBox="0 0 70 50">
                        <rect width="70"
                              height="50"
                              fill="#e5e5e6"/>
                        <path d="M14,10H70a0,0,0,0,1,0,0V50a0,0,0,0,1,0,0H10a0,0,0,0,1,0,0V14A4,4,0,0,1,14,10Z"
                              fill="#fff"/>
                        <circle cx="18"
                                cy="18"
                                r="3"
                                fill="#e5e5e6"/>
                        <circle cx="27"
                                cy="18"
                                r="3"
                                fill="#e5e5e6"/>
                        <circle cx="36"
                                cy="18"
                                r="3"
                                fill="#e5e5e6"/>
                        <rect x="17"
                              y="28"
                              width="46"
                              height="3"
                              rx="1"
                              fill="#38393e"/>
                        <rect x="17"
                              y="34"
                              width="46"
                              height="3"
                              rx="1"
                              fill="#38393e"/>
                        <rect x="17"
                              y="40"
                              width="30"
                              height="3"
                              rx="1"
                              fill="#38393e"/>
                    </svg>
                </figure>
                <div class="text-xs margin-top-xxxs padding-x-xxxxs">Light</div>
            </div>
            <div class="ld-switch-popover__option"
                 aria-selected="{selection === 'system' ? 'true' : 'false'}"
                 role="option">
                <figure class="radius-md inner-glow"
                        on:click={() => change("system")}>
                    <svg id="Layer_1"
                         data-name="Layer 1"
                         xmlns="http://www.w3.org/2000/svg"
                         class="block radius-inherit"
                         width="70"
                         height="50"
                         viewBox="0 0 70 50">
                        <rect width="35"
                              height="50"
                              fill="#e5e5e6"/>
                        <path d="M14,10H35a0,0,0,0,1,0,0V50a0,0,0,0,1,0,0H10a0,0,0,0,1,0,0V14A4,4,0,0,1,14,10Z"
                              fill="#fff"/>
                        <circle cx="18"
                                cy="18"
                                r="3"
                                fill="#e5e5e6"/>
                        <circle cx="27"
                                cy="18"
                                r="3"
                                fill="#e5e5e6"/>
                        <path d="M18,28H35a0,0,0,0,1,0,0v3a0,0,0,0,1,0,0H18a1,1,0,0,1-1-1V29A1,1,0,0,1,18,28Z"
                              fill="#38393e"/>
                        <path d="M18,34H35a0,0,0,0,1,0,0v3a0,0,0,0,1,0,0H18a1,1,0,0,1-1-1V35A1,1,0,0,1,18,34Z"
                              fill="#38393e"/>
                        <path d="M18,40H35a0,0,0,0,1,0,0v3a0,0,0,0,1,0,0H18a1,1,0,0,1-1-1V41A1,1,0,0,1,18,40Z"
                              fill="#38393e"/>
                        <rect x="35"
                              width="35"
                              height="50"
                              fill="#22232a"/>
                        <path d="M49,10H70V50H45V14A4,4,0,0,1,49,10Z"
                              fill="#5a5c63"/>
                        <circle cx="53"
                                cy="18"
                                r="3"
                                fill="#22232a"/>
                        <circle cx="62"
                                cy="18"
                                r="3"
                                fill="#22232a"/>
                        <path d="M53,28H70a0,0,0,0,1,0,0v3a0,0,0,0,1,0,0H53a1,1,0,0,1-1-1V29A1,1,0,0,1,53,28Z"
                              fill="#fafaff"/>
                        <path d="M53,34H70a0,0,0,0,1,0,0v3a0,0,0,0,1,0,0H53a1,1,0,0,1-1-1V35A1,1,0,0,1,53,34Z"
                              fill="#fafaff"/>
                        <path d="M53,40H70a0,0,0,0,1,0,0v3a0,0,0,0,1,0,0H53a1,1,0,0,1-1-1V41A1,1,0,0,1,53,40Z"
                              fill="#fafaff"/>
                    </svg>
                </figure>
                <div class="text-xs margin-top-xxxs padding-x-xxxxs">System</div>
            </div>
        </div>
    </div>
</div>
