import { afterNavigate, beforeNavigate } from '$app/navigation';
import { draftMessagesStore } from '$lib/stores';
import { onMount } from 'svelte';

interface UseDraftMessagesOptions {
	getChatId: () => string | undefined;
	getMessage: () => string;
	getFiles: () => ChatUploadedFile[];
	setMessage: (message: string) => void;
	setFiles: (files: ChatUploadedFile[]) => void;
	getInitialMessage: () => string;
}

export function useDraftMessages(options: UseDraftMessagesOptions) {
	onMount(() => {
		const chatId = options.getChatId();
		const draft = draftMessagesStore.getDraftMessage(chatId);

		if ((draft.message || draft.files.length > 0) && !options.getInitialMessage()) {
			options.setMessage(draft.message);
			options.setFiles(draft.files);
		}
	});

	beforeNavigate(() => {
		const chatId = options.getChatId();

		draftMessagesStore.saveDraftMessage(chatId, options.getMessage(), options.getFiles());
	});

	afterNavigate((navigation) => {
		if (navigation?.from != null) {
			const chatId = options.getChatId();
			const draft = draftMessagesStore.getDraftMessage(chatId);

			options.setMessage(draft.message);
			options.setFiles(draft.files);
		}
	});

	function clearDraft() {
		const chatId = options.getChatId();

		draftMessagesStore.clearDraftMessage(chatId);
	}

	return { clearDraft };
}
