'use client';

import { Button } from 'antd';
import { message } from '@/lib/feedback/message';
import { confirmDialog } from '@/lib/feedback/confirmDialog';
import { useMutationCache } from '@/hooks/useMutationCache';
import { API_ENDPOINTS } from '@/lib/api/endpoints';
import { getLaravelApiErrorMessage } from '@/lib/api/laravelApiErrorMessage';

export type PropostaAprovarDescontoButtonProps = {
    propostaId: number;
    /** Já aprovado — oculta o botão. */
    jaAprovado?: boolean;
    /** Só mostrar quando o desconto está acima do teto. */
    acimaDoTeto?: boolean;
    disabled?: boolean;
    onSuccess?: () => void;
};

/**
 * X10 — aprovação gerencial de desconto acima do teto do vendedor.
 */
export function PropostaAprovarDescontoButton({
    propostaId,
    jaAprovado = false,
    acimaDoTeto = true,
    disabled = false,
    onSuccess,
}: PropostaAprovarDescontoButtonProps) {
    const mutation = useMutationCache<{ message?: string }, Record<string, never>>({
        endpoint: API_ENDPOINTS.vendas.propostas.aprovarDesconto(propostaId),
        method: 'POST',
        onSuccess: (data) => {
            message.success(data?.message ?? 'Desconto aprovado. A proposta pode ser enviada.');
            onSuccess?.();
        },
        onError: (err: unknown) => {
            const status =
                err && typeof err === 'object' && 'response' in err
                    ? (err as { response?: { status?: number } }).response?.status
                    : undefined;
            if (status === 403) {
                message.warning(
                    'Sem permissão para aprovar desconto. Peça a um aprovador da proposta.',
                );
                return;
            }
            message.error(
                getLaravelApiErrorMessage(err, 'Não foi possível aprovar o desconto.'),
            );
        },
    });

    if (jaAprovado || !acimaDoTeto) {
        return null;
    }

    return (
        <Button
            size="small"
            type="primary"
            danger
            loading={mutation.isPending}
            disabled={disabled}
            data-testid="crm-proposta-aprovar-desconto"
            onClick={() => {
                confirmDialog({
                    title: 'Aprovar desconto acima do teto?',
                    content:
                        'Após a aprovação, o vendedor poderá marcar a proposta como enviada mesmo com desconto acima do teto configurado.',
                    okText: 'Aprovar desconto',
                    cancelText: 'Cancelar',
                    onOk: () => mutation.mutate({}),
                });
            }}
        >
            Aprovar desconto
        </Button>
    );
}
