<script lang="ts">
	import CitationsModal from './CitationsModal.svelte';

	export let citations = [];

	let _citations = [];

	$: _citations = citations.reduce((acc, citation) => {
		citation.document.forEach((document, index) => {
			const metadata = citation.metadata?.[index];
			const id = metadata?.source ?? 'N/A';
			let source = citation?.source;

			if (metadata?.name) {
				source = { ...source, name: metadata.name };
			}

			// Check if ID looks like a URL
			if (id.startsWith('http://') || id.startsWith('https://')) {
				source = { name: id };
			}

			const existingSource = acc.find((item) => item.id === id);

			if (existingSource) {
				existingSource.document.push(document);
				existingSource.metadata.push(metadata);
			} else {
				acc.push({
					id: id,
					source: source,
					document: [document],
					metadata: metadata ? [metadata] : []
				});
			}
		});
		return acc;
	}, []);

	let showCitationModal = false;
	let selectedCitation = null;
</script>

<CitationsModal bind:show={showCitationModal} citation={selectedCitation} />

{#if _citations.length > 0}
	<div class="mt-1 mb-2 w-full flex gap-1 items-center flex-wrap">
		{#each _citations as citation, idx}
			<div class="flex gap-1 text-xs font-semibold">
				<button
					class="flex dark:text-gray-300 py-1 px-1 bg-gray-50 hover:bg-gray-100 dark:bg-gray-850 dark:hover:bg-gray-800 transition rounded-xl max-w-96"
					on:click={() => {
						showCitationModal = true;
						selectedCitation = citation;
					}}
				>
					<div class="bg-white dark:bg-gray-700 rounded-full size-4">
						{idx + 1}
					</div>
					<div class="flex-1 mx-2 line-clamp-1">
						{citation.source.name}
					</div>
				</button>
			</div>
		{/each}
	</div>
{/if}