<script>
    // import { listen } from '@tauri-apps/api/event';
    import { open } from '@tauri-apps/plugin-dialog';
    import { sep } from '@tauri-apps/api/path';
    import { createEventDispatcher } from 'svelte';

    import Icon from './Icon.svelte';


    export let value = {};
    export let params = {};
    let displayValue = value?.name || '';

    const dispatch = createEventDispatcher();

    async function chooseFile() {
        let file = await open(params);
        if (file) {
            value = file;
            displayValue = file.name;
            dispatch('update', value);
        }
    }

    function handleInput(evt) {
        const segments = evt.target.value.split(sep());
        const name = segments[segments.length - 1];
        value = {name, path: evt.target.value};
    }

    // some day, figure out drag-and-drop
    // let drag = null;
    // listen('tauri://drag', e => drag = e);
    // listen('tauri://drop', e => console.log(e));
    // listen('tauri://drag-cancelled', e => console.log(e));
    // listen('tauri://drop-over', e => console.log(e));

</script>


<div class="relative flex join has-[:focus]:outline outline-2 outline-offset-2 outline-base-content/20">
    <button type="button" class="btn btn-neutral join-item" on:click={chooseFile}>
        Choose file
    </button>
    <input 
        type="text"
        class="join-item grow input input-bordered border-l-0 bg-transparent focus:outline-none"
        value={displayValue}
        on:input={handleInput}
        on:change={() => dispatch('update', value)}
        on:focus on:blur
    >
</div>