'use client';
import { isApiError, type IrpCategory } from '@impuestos/contracts';
import { formatDateLong, formatGs, type Locale } from '@impuestos/i18n';
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { useState } from 'react';
import { CategoryPicker } from '@/components/category-picker';
import { Button } from '@/components/ui/button';
import { Card } from '@/components/ui/card';
import { Skeleton } from '@/components/ui/skeleton';
import { StatusChip } from '@/components/ui/status-chip';
import { Switch } from '@/components/ui/switch';
import { useT } from '@/i18n/t';
import { api } from '@/lib/api';
/** Flow E1 detail: the data, the image, and the classification the user can override. */
export function DocumentDetail({ id, locale }: { id: string; locale: string }) {
const t = useT();
const queryClient = useQueryClient();
const [editing, setEditing] = useState(false);
const document = useQuery({
queryKey: ['documents', id],
queryFn: ({ signal }) => api.getDocument(id, signal),
retry: (count, error) => !isApiError(error) && count < 1,
});
const reclassify = useMutation({
mutationFn: (patch: { irpCategory?: IrpCategory | 'none'; ivaCreditEligible?: boolean }) =>
api.patchClassification(id, patch),
onSuccess: async () => {
setEditing(false);
await queryClient.invalidateQueries({ queryKey: ['documents'] });
},
});
if (document.isPending) {
return (
{missing ? t('error.not_found') : t('common.error.generic')}
{formatDateLong(locale as Locale, doc.issueDate)}
{formatGs(doc.total)}
{t(`categories.${category}` as const)}
)} {classification ? (