'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';
import { PropostaPrimariaTag } from './PropostaPrimariaTag';

export type PropostaMarcarPrimariaButtonProps = {
    propostaId: number;
    jaPrimaria?: boolean | null;
    disabled?: boolean;
    onSuccess?: () => void;
};

/**
 * N4 — marca proposta como primária do negócio (endpoint tipado em rest.ts).
 * Se a API ainda não existir (404/501), feedback claro sem inventar payload.
 */
export function PropostaMarcarPrimariaButton({
    propostaId,
    jaPrimaria = false,
    disabled = false,
    onSuccess,
}: PropostaMarcarPrimariaButtonProps) {
    const mutation = useMutationCache<{ message?: string }, Record<string, never>>({
        endpoint: API_ENDPOINTS.vendas.propostas.marcarPrimaria(propostaId),
        method: 'POST',
        onSuccess: (data) => {
            message.success(data?.message ?? 'Proposta marcada como primária do negócio.');
            onSuccess?.();
        },
        onError: (err: unknown) => {
            const status =
                err && typeof err === 'object' && 'response' in err
                    ? (err as { response?: { status?: number } }).response?.status
                    : undefined;
            if (status === 404 || status === 501) {
                message.warning(
                    'Marcar como primária ainda não está disponível neste ambiente. O contrato FE já está alinhado (N4).',
                );
                return;
            }
            message.error(
                getLaravelApiErrorMessage(err, 'Não foi possível marcar a proposta como primária.'),
            );
        },
    });

    if (jaPrimaria) {
        return <PropostaPrimariaTag primaria />;
    }

    const handleClick = () => {
        confirmDialog({
            title: 'Definir como proposta primária?',
            content:
                'O forecast do negócio usará esta proposta. Outra primária viva no mesmo negócio deixa de ser a principal.',
            okText: 'Marcar como primária',
            cancelText: 'Cancelar',
            onOk: () => mutation.mutate({}),
        });
    };

    return (
        <Button
            type="default"
            size="small"
            onClick={handleClick}
            loading={mutation.isPending}
            disabled={disabled}
            data-testid="crm-proposta-marcar-primaria"
        >
            Marcar como primária
        </Button>
    );
}
