'use client';

import { useState } from 'react';
import { Alert, Button, Checkbox, Space } from 'antd';
import { useRouter } from 'next/navigation';
import { message } from '@/lib/feedback/message';
import { confirmDialog } from '@/lib/feedback/confirmDialog';
import { getLaravelApiErrorMessage } from '@/lib/api/laravelApiErrorMessage';
import { kickoffProjeto } from '@/lib/api/fluxoComercialClient';
import { KICKOFF_ALERT_DESCRIPTION, KICKOFF_ALERT_TITLE } from '../kickoffCopy';

export type ProjetoKickoffBannerProps = {
    projetoId: string;
    /** Ex.: link para gestão executiva / checklist de handoff. */
    gestaoHref?: string;
    style?: React.CSSProperties;
    /** Após kickoff bem-sucedido (ex.: refetch do layout). */
    onSuccess?: () => void;
};

/**
 * X13 / D2 — Won ≠ Start: alerta em `aguardando_inicio` + CTA kickoff real.
 */
export function ProjetoKickoffBanner({
    projetoId,
    gestaoHref,
    style,
    onSuccess,
}: ProjetoKickoffBannerProps) {
    const router = useRouter();
    const href = gestaoHref ?? `/projetos/${projetoId}/gestao`;
    const [loading, setLoading] = useState(false);
    const [validacaoOk, setValidacaoOk] = useState(false);
    const [doneResultado, setDoneResultado] = useState<string | null>(null);

    const handleIniciarExecucao = () => {
        if (!validacaoOk) {
            message.warning(
                'Confirme a validação operacional antes de iniciar a execução.',
            );
            return;
        }
        confirmDialog({
            title: 'Iniciar execução do projeto?',
            content:
                'Ganhar o negócio ≠ começar o projeto. Ao confirmar, o status passa para em andamento e a equipe entra em modo execução.',
            okText: 'Iniciar execução',
            cancelText: 'Cancelar',
            onOk: async () => {
                setLoading(true);
                try {
                    const res = await kickoffProjeto(projetoId, {
                        iniciar_execucao: true,
                        validacao_operacional_ok: true,
                    });
                    const resultado = res.data?.resultado ?? 'em_andamento';
                    setDoneResultado(resultado);
                    message.success(res.message ?? 'Kickoff executado.');
                    onSuccess?.();
                } catch (err: unknown) {
                    message.error(
                        getLaravelApiErrorMessage(
                            err,
                            'Não foi possível executar o kickoff. Verifique contrato e permissões.',
                        ),
                    );
                } finally {
                    setLoading(false);
                }
            },
        });
    };

    if (doneResultado === 'em_andamento' || doneResultado === 'ja_em_andamento') {
        return (
            <Alert
                type="success"
                showIcon
                style={{ marginBottom: 16, ...style }}
                message="Projeto em execução"
                description="O kickoff foi registrado. O menu tipológico passa a destacar entregas, sprints e tarefas."
                data-testid="crm-kickoff-banner-sucesso"
            />
        );
    }

    return (
        <Alert
            type="warning"
            showIcon
            style={{ marginBottom: 16, ...style }}
            message={KICKOFF_ALERT_TITLE}
            description={
                <Space direction="vertical" size={8} style={{ width: '100%' }}>
                    <span>{KICKOFF_ALERT_DESCRIPTION}</span>
                    <Checkbox
                        checked={validacaoOk}
                        onChange={(e) => setValidacaoOk(e.target.checked)}
                        data-testid="crm-kickoff-validacao-ok"
                    >
                        Validação operacional concluída (capacidade, datas, handoff)
                    </Checkbox>
                    <Space wrap size={8}>
                        <Button
                            size="small"
                            type="primary"
                            loading={loading}
                            onClick={handleIniciarExecucao}
                            data-testid="crm-kickoff-iniciar-execucao"
                        >
                            Iniciar execução
                        </Button>
                        <Button
                            size="small"
                            onClick={() => router.push(href)}
                            data-testid="crm-kickoff-ir-gestao"
                        >
                            Abrir gestão / handoff
                        </Button>
                    </Space>
                </Space>
            }
            data-testid="crm-kickoff-banner"
        />
    );
}
