'use client';

/**
 * Botão «Exportar CSV» tipológico (Telas / Stack / Domínios) — TASK-APR-045.
 */

import { Download } from 'lucide-react';
import React, { useCallback, useState } from 'react';
import { Button, Tooltip } from 'antd';
import { ICON_SIZE_MD } from '@/components/icons';
import {
    downloadAplicacaoReactExportCsv,
    type AplicacaoReactExportKind,
} from './downloadAplicacaoReactExportCsv';

export type AplicacaoReactExportCsvButtonProps = {
    projetoId: string | number;
    kind: AplicacaoReactExportKind;
    /** Variante visual — header tipológico ou inline. */
    size?: 'small' | 'middle' | 'large';
    type?: 'default' | 'primary' | 'dashed' | 'link' | 'text';
    className?: string;
};

const LABELS: Record<AplicacaoReactExportKind, { title: string; tooltip: string }> = {
    paginas: {
        title: 'Exportar CSV',
        tooltip: 'Baixar CSV tipológico das telas (auditado no servidor)',
    },
    stack: {
        title: 'Exportar CSV',
        tooltip: 'Baixar CSV tipológico da stack (sem URL GitLab; auditado no servidor)',
    },
    dominios: {
        title: 'Exportar CSV',
        tooltip:
            'Baixar CSV tipológico de domínios — pode vir vazio enquanto a API estiver Em breve',
    },
};

export function AplicacaoReactExportCsvButton({
    projetoId,
    kind,
    size = 'middle',
    type = 'default',
    className,
}: AplicacaoReactExportCsvButtonProps) {
    const [loading, setLoading] = useState(false);
    const copy = LABELS[kind];

    const handleClick = useCallback(async () => {
        setLoading(true);
        try {
            await downloadAplicacaoReactExportCsv({ projetoId, kind });
        } finally {
            setLoading(false);
        }
    }, [projetoId, kind]);

    return (
        <Tooltip title={copy.tooltip}>
            <span style={{ display: 'inline-block' }}>
                <Button
                    type={type}
                    size={size}
                    className={className}
                    icon={<Download size={ICON_SIZE_MD} aria-hidden />}
                    loading={loading}
                    onClick={() => void handleClick()}
                    data-testid={`aplicacao-react-export-csv-${kind}`}
                    aria-label={copy.tooltip}
                >
                    {copy.title}
                </Button>
            </span>
        </Tooltip>
    );
}
