'use client'; import { useState } from 'react'; import { useParams, useRouter } from 'next/navigation'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import { Pencil, Archive } from 'lucide-react'; import { toast } from 'sonner'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { ArchiveConfirmDialog } from '@/components/shared/archive-confirm-dialog'; import { DetailHeaderStrip } from '@/components/shared/detail-header-strip'; import { PermissionGate } from '@/components/shared/permission-gate'; import { CompanyForm } from '@/components/companies/company-form'; import { apiFetch } from '@/lib/api/client'; interface CompanyDetailHeaderCompany { id: string; name: string; legalName: string | null; taxId: string | null; registrationNumber: string | null; incorporationCountry: string | null; incorporationDate: string | null; status: string; billingEmail: string | null; notes: string | null; archivedAt: string | null; } interface CompanyDetailHeaderProps { company: CompanyDetailHeaderCompany; } const STATUS_COLORS: Record = { active: 'bg-green-100 text-green-800 border-green-300', dissolved: 'bg-red-100 text-red-800 border-red-300', }; const STATUS_LABELS: Record = { active: 'Active', dissolved: 'Dissolved', }; export function CompanyDetailHeader({ company }: CompanyDetailHeaderProps) { const queryClient = useQueryClient(); const router = useRouter(); const params = useParams<{ portSlug: string }>(); const portSlug = params?.portSlug ?? ''; const [editOpen, setEditOpen] = useState(false); const [archiveOpen, setArchiveOpen] = useState(false); const isArchived = !!company.archivedAt; const showLegalName = company.legalName && company.legalName !== company.name; const archiveMutation = useMutation({ mutationFn: () => apiFetch(`/api/v1/companies/${company.id}`, { method: 'DELETE' }), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['companies', company.id] }); queryClient.invalidateQueries({ queryKey: ['companies'] }); toast.success('Company archived'); setArchiveOpen(false); // eslint-disable-next-line @typescript-eslint/no-explicit-any router.push(`/${portSlug}/companies` as any); }, onError: (err: Error) => { toast.error(err.message || 'Failed to archive company'); }, }); const statusLabel = STATUS_LABELS[company.status] ?? company.status; const statusColor = STATUS_COLORS[company.status] ?? 'bg-muted text-muted-foreground border-muted'; return ( <>

{company.name}

{statusLabel} {isArchived && ( Archived )}
{showLegalName &&

{company.legalName}

} {company.taxId &&

Tax ID: {company.taxId}

}
{/* Actions */}
{ archiveMutation.mutate(); }} isLoading={archiveMutation.isPending} /> ); }