'use client';

/**
 * Inventário agregado de integrações programa + N filhos (TASK-PPS-063 / LEG-PPS-06).
 * Read-only; payload API sem secrets. 403 → não renderiza.
 */

import { Network } from 'lucide-react';
import React from 'react';
import { Alert, Descriptions, Tag, Typography } from 'antd';
import ContentCard from '@/components/layouts/ContentCard';
import { useQueryCache } from '@/hooks/useQueryCache';
import { API_ENDPOINTS } from '@/lib/api/endpoints';
import { queryKeys } from '@/lib/cache/queryKeys';

const { Text, Paragraph } = Typography;

export type ProdutoIntegracoesInventarioResponse = {
    data: {
        projeto_id: number;
        resumo: {
            superficies_total: number;
            webhooks_total: number;
            integracoes_total: number;
            emails_smtp_total: number;
            infraestrutura_ftp_total: number;
        };
    };
    meta: {
        escopo: string;
        sem_secrets: boolean;
        nota?: string;
    };
};

type Props = {
    projetoId: string;
};

function isForbidden(error: unknown): boolean {
    const status = (error as { response?: { status?: number } })?.response?.status;
    return status === 403 || status === 401;
}

/**
 * Painel compacto no dashboard produto — vista programa das partilhas das superfícies.
 */
export function ProdutoIntegracoesInventarioCard({ projetoId }: Props) {
    const { data, isError, error, isLoading } = useQueryCache<ProdutoIntegracoesInventarioResponse>({
        queryKey: queryKeys.projetos.produtoIntegracoesInventario(projetoId),
        endpoint: API_ENDPOINTS.projetos.produto.integracoesInventario(projetoId),
        enabled: Boolean(projetoId),
        staleTime: 2 * 60 * 1000,
        retry: 0,
    });

    if (isError && isForbidden(error)) {
        return null;
    }

    if (isError) {
        return (
            <Alert
                type="warning"
                showIcon
                style={{ marginBottom: 16 }}
                message="Inventário de integrações indisponível"
                description="Não foi possível agregar webhooks/SMTP/FTP das superfícies. Verifique o addon e tente novamente."
            />
        );
    }

    if (isLoading || !data) {
        return null;
    }

    const r = data.data.resumo;

    return (
        <div data-testid="produto-integracoes-inventario-card">
            <ContentCard
                title="Integrações do programa"
                icon={<Network size={18} aria-hidden />}
                headerActions={data.meta.sem_secrets ? <Tag color="green">sem secrets</Tag> : undefined}
                style={{ marginBottom: 16 }}
            >
                <Paragraph type="secondary" style={{ marginBottom: 12 }}>
                    Vista agregada (programa + superfícies) para DSAR/ops — hosts e flags, sem tokens nem URL
                    completa.
                </Paragraph>
                <Descriptions size="small" column={{ xs: 1, sm: 2, md: 3 }}>
                    <Descriptions.Item label="Superfícies">{r.superficies_total}</Descriptions.Item>
                    <Descriptions.Item label="Webhooks">{r.webhooks_total}</Descriptions.Item>
                    <Descriptions.Item label="Integrações tipadas">{r.integracoes_total}</Descriptions.Item>
                    <Descriptions.Item label="SMTP">{r.emails_smtp_total}</Descriptions.Item>
                    <Descriptions.Item label="FTP">{r.infraestrutura_ftp_total}</Descriptions.Item>
                </Descriptions>
                <Text type="secondary" style={{ fontSize: 12 }}>
                    Escopo: {data.meta.escopo}. Detalhe completo via API{' '}
                    <Text code>/produto/integracoes-inventario</Text>.
                </Text>
            </ContentCard>
        </div>
    );
}
