import { router } from '@inertiajs/react';
import { Icon, RotateCcw } from 'lucide-react';
import { useState } from 'react';
import { Button } from '@/components/ui/button';
import { DocumentFileActions } from '@/features/documents/components/document-file-actions';
import { DocumentStatusBadgeDropdown } from '@/features/documents/components/document-status-badge-dropdown';
import { canUseReviewAction } from '@/features/documents/lib/review-permissions';
import { getAllowedReviewActions } from '@/features/documents/lib/review-workflow';
import { useDocumentReviewTranslations } from '@/features/documents/lib/use-document-review-translations';
import type { DocumentDetail } from '@/features/documents/types';
import { useAuthorization } from '@/hooks/use-authorization';
import { IconButton } from '@/components/common/IconButton';
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';

type DocumentShowHeaderActionsProps = {
    document: DocumentDetail;
};

export function DocumentShowHeaderActions({ document }: DocumentShowHeaderActionsProps) {
    const { labels } = useDocumentReviewTranslations();
    const { can, hasRole } = useAuthorization();
    const [isReprocessing, setIsReprocessing] = useState(false);

    const canReview = can('review documents') || hasRole('admin') || hasRole('accountant');
    const canValidate =
        can('validate documents') || can('approve documents') || hasRole('admin') || hasRole('accountant');

    const canReprocess =
        getAllowedReviewActions(document.ai_status, document.accountant_status).includes('reprocess') &&
        canUseReviewAction('reprocess', can, hasRole);

    const runReprocess = () => {
        router.post(
            `/admin/documents/${document.id}/review`,
            { action: 'reprocess' },
            {
                preserveScroll: true,
                preserveState: true,
                onStart: () => setIsReprocessing(true),
                onFinish: () => setIsReprocessing(false),
            },
        );
    };

    return (
        <div className="flex flex-wrap items-center justify-end gap-2">
            {canReview ? (
                <DocumentStatusBadgeDropdown
                    documentId={document.id}
                    aiStatus={document.ai_status}
                    accountantStatus={document.accountant_status}
                    canReview={canReview}
                    canValidate={canValidate}
                    size="md"
                />
            ) : null}

            {canReprocess ? (
                <TooltipProvider>
                    <Tooltip>
                        <TooltipTrigger>
                            <IconButton
                                color="secondary"
                                variant="contained"
                                size="sm"
                                icon="uim:process"
                                onClick={runReprocess}
                                disabled={isReprocessing}
                            />
                        </TooltipTrigger>
                        <TooltipContent>
                            {labels.reprocess}
                        </TooltipContent>
                    </Tooltip>
                </TooltipProvider>
            ) : null}
        </div>
    );
}
