<template>
    <div v-if="page" class="p-12 flex flex-1 flex-col items-start justify-start">
        <Head>
            <Title>Modification de {{ page.title }}</Title>
        </Head>
        <div class="flex justify-between items-center w-full px-4 max-h-full">
                <div class="flex gap-16 items-center justify-start">
                    <input type="text" v-model="page.title" placeholder="Titre" class="mx-4 h-16 caret-light-50 dark:caret-dark-50 text-light-100 dark:text-dark-100 placeholder:text-light-50 dark:placeholder:text-dark-50 appearance-none outline-none px-3 py-1 text-5xl font-thin bg-transparent" />
                </div>
                <div class="flex gap-4">
                    <Tooltip message="Consultable uniquement par le propriétaire" side="bottom"><Switch label="Privé" v-model="page.private" /></Tooltip>
                    <Tooltip message="Afficher dans le menu de navigation" side="bottom"><Switch label="Navigable" v-model="page.navigable" /></Tooltip>
                    <Button @click="() => save()" :loading="saveStatus === 'pending'" class="border-light-blue dark:border-dark-blue hover:border-light-blue dark:hover:border-dark-blue focus:shadow-light-blue dark:focus:shadow-dark-blue">Enregistrer</Button>
                </div>
            </div>
            <div class="border-t border-light-35 dark:border-dark-35 mt-4 flex-1 w-full max-h-full flex pt-4">
                <template v-if="page.type === 'markdown'">
                    <textarea v-model="page.content" class="flex-1 bg-transparent appearance-none outline-none max-h-full resize-none"></textarea>
                    <div class="flex-1 border-s border-light-35 dark:border-dark-35 ms-4 pt-4 ps-4 max-h-full">
                        <Markdown class="max-h-full overflow-auto" :content="page.content" />
                    </div>
                </template>
                <template v-else-if="page.type === 'canvas'">
                    <span class="flex-1 items-center"><ProseH1>Editeur de graphe en cours de développement</ProseH1></span>
                </template>
                <template v-else-if="page.type === 'file'">
                    <span>Modifier le contenu :</span><input type="file" @change="(e) => console.log(e)" />
                </template>
            </div>
    </div>
    <div v-else-if="status === 'pending'" class="flex">
        <Head>
            <Title>Chargement</Title>
        </Head>
        <Loading />
    </div>
    <div v-else-if="status === 'error'">{{ error?.message }}</div>
</template>

<script setup lang="ts">
const route = useRouter().currentRoute;
const path = computed(() => Array.isArray(route.value.params.path) ? route.value.params.path[0] : route.value.params.path);

const toaster = useToast();
const saveStatus = ref<'idle' | 'pending' | 'success' | 'error'>('idle');

const { data: page, status, error } = await useLazyFetch(`/api/file/${encodeURIComponent(path.value)}`, { watch: [ route, path ]});

async function save(): Promise<void>
{
    saveStatus.value = 'pending';
    try {
        await $fetch(`/api/file`, {
            method: 'post',
            body: page.value,
            headers: {
                'Content-Type': 'application/json',
            },
        });
        saveStatus.value = 'success';

        toaster.clear('error');
        toaster.add({
            type: 'success', content: 'Contenu enregistré', timer: true, duration: 10000
        });

        useRouter().push({ name: 'explore-path', params: { path: path.value } });
    } catch(e: any) {
        toaster.add({
            type: 'error', content: e.message, timer: true, duration: 10000
        })
        saveStatus.value = 'error';
    }
}
</script>