<script lang="ts">
	import { Button } from '$lib/components/ui/button';
	import * as DropdownMenu from '$lib/components/ui/dropdown-menu';
	import { Ellipsis, FileCheck2, Download, FolderArchive, Pencil, Trash2 } from 'lucide-svelte';
	import { expedienteArchivosApi, type ExpedienteArchivo } from '$lib/api/dashboard/a76/expediente-archivos';
	import { companyStore } from '$lib/stores/company.svelte';
	import CreateEditDialog from './create-edit-dialog.svelte';
	import { m } from '$lib/i18n/messages';

	let {
		item,
		onSuccess,
		onDigitalizar
	}: {
		item: ExpedienteArchivo;
		onSuccess?: () => void;
		onDigitalizar?: (item: ExpedienteArchivo) => void;
	} = $props();

	let loading = $state(false);
	let editOpen = $state(false);

async function downloadArtifact(
                type: 'acuse' | 'envio-xml' | 'respuesta-xml' | 'consulta-envio-xml' | 'consulta-respuesta-xml',
                filename: string
        ) {
                if (!companyStore.activeCompany) return;
                try {
                        await expedienteArchivosApi.downloadArtifact(
                                item.id,
                                type,
                                companyStore.activeCompany.id,
                                filename
                        );
                } catch {
                        alert('Error al descargar el archivo.');
                }
        }

        const baseName = $derived((item.nombre_archivo || String(item.id)).replace(/\.[^.]+$/, ''));

        async function downloadZip() {
                if (!companyStore.activeCompany) return;
                try {
                        await expedienteArchivosApi.downloadAllArtifactsZip(
                                item.id,
                                companyStore.activeCompany.id,
                                item.e_document || String(item.id)
                        );
                } catch {
                        alert('Error al descargar el ZIP.');
                }
        }

	async function handleDelete() {
		if (!confirm(m['sidebar.digitalizacion.confirm_delete']())) return;
		if (!companyStore.activeCompany) return;
		loading = true;
		try {
			const res = await expedienteArchivosApi.delete(item.id, companyStore.activeCompany.id);
			if (res.error) {
				alert(`Error al eliminar: ${res.error}`);
				return;
			}
			onSuccess?.();
		} catch (e) {
			alert(`Error: ${e instanceof Error ? e.message : 'Error desconocido'}`);
		} finally {
			loading = false;
		}
	}
</script>

<DropdownMenu.Root>
	<DropdownMenu.Trigger>
		{#snippet child({ props })}
			<Button {...props} variant="ghost" size="icon" class="h-8 w-8 p-0" disabled={loading}>
				<span class="sr-only">Abrir menú</span>
				<Ellipsis class="h-4 w-4" />
			</Button>
		{/snippet}
	</DropdownMenu.Trigger>
	<DropdownMenu.Content align="end">
		<DropdownMenu.Label>Acciones</DropdownMenu.Label>
		<DropdownMenu.Separator />

		<DropdownMenu.Item onclick={() => onDigitalizar?.(item)}>
			<FileCheck2 class="mr-2 h-4 w-4" />
			{m['sidebar.digitalizacion.action_digitalizar']()}
		</DropdownMenu.Item>

		{#if item.status === 'success'}
			<DropdownMenu.Item onclick={downloadZip}>
				<FolderArchive class="mr-2 h-4 w-4" />
				{m['sidebar.digitalizacion.action_download_zip']()}
			</DropdownMenu.Item>
		{/if}

		{#if item.status === 'success'}
                        <DropdownMenu.Item onclick={() => downloadArtifact('acuse', `acuse_${baseName}.pdf`)}>
                                <Download class="mr-2 h-4 w-4" />
                                {m['sidebar.digitalizacion.action_acuse']()}
                        </DropdownMenu.Item>
                {/if}

                {#if item.envio_xml_path}
                        <DropdownMenu.Item onclick={() => downloadArtifact('envio-xml', `envio_${baseName}.xml`)}>
                                <Download class="mr-2 h-4 w-4" />
                                {m['sidebar.digitalizacion.action_envio_xml']()}
                        </DropdownMenu.Item>
                {/if}

                {#if item.respuesta_xml_path}
                        <DropdownMenu.Item onclick={() => downloadArtifact('respuesta-xml', `respuesta_${baseName}.xml`)}>
                                <Download class="mr-2 h-4 w-4" />
                                {m['sidebar.digitalizacion.action_respuesta_xml']()}
                        </DropdownMenu.Item>
                {/if}

                {#if item.consulta_envio_xml_path}
                        <DropdownMenu.Item onclick={() => downloadArtifact('consulta-envio-xml', `consulta_envio_${baseName}.xml`)}>
                                <Download class="mr-2 h-4 w-4" />
                                {m['sidebar.digitalizacion.action_consulta_envio_xml']()}
                        </DropdownMenu.Item>
                {/if}

                {#if item.consulta_respuesta_xml_path}
                        <DropdownMenu.Item onclick={() => downloadArtifact('consulta-respuesta-xml', `consulta_respuesta_${baseName}.xml`)}>
                                <Download class="mr-2 h-4 w-4" />
                                {m['sidebar.digitalizacion.action_consulta_respuesta_xml']()}
                        </DropdownMenu.Item>
                {/if}

                <DropdownMenu.Separator />

                <DropdownMenu.Item onclick={() => (editOpen = true)}>
			<Pencil class="mr-2 h-4 w-4" />
			{m['sidebar.digitalizacion.action_edit']()}
		</DropdownMenu.Item>

		<DropdownMenu.Item
			class="text-destructive focus:text-destructive"
			onclick={handleDelete}
		>
			<Trash2 class="mr-2 h-4 w-4" />
			{m['sidebar.digitalizacion.action_delete']()}
		</DropdownMenu.Item>
	</DropdownMenu.Content>
</DropdownMenu.Root>

<CreateEditDialog bind:open={editOpen} {item} onSuccess={onSuccess} />
