'use client';

/**
 * Bloco checklist go-live + deploy/preview + actividade + Performance/CWV no hub Visão Geral
 * — tipos website (TASK-PWP-025 / 051 / 061 / 062 / 064).
 */

import { Col, Row } from 'antd';

import type { Projeto } from '@/types';

import scStyles from '@/features/projetos/sistema-customizado-prontidao/ScProntidaoHubBlock.module.scss';

import { AplicacaoReactFronteiraHubAlert } from './AplicacaoReactFronteiraHubAlert';
import { WebsiteDeployPreviewCard } from './WebsiteDeployPreviewCard';
import { WebsiteHubActivityCard } from './WebsiteHubActivityCard';
import { WebsiteHubPerformanceCard } from './WebsiteHubPerformanceCard';
import { WebsiteOnboardingChecklistCard } from './WebsiteOnboardingChecklistCard';
import { resolveWebsiteTipologiaHubMeta } from './resolveWebsiteTipologiaHubMeta';
import { useWebsiteDeployPreviewHub } from './useWebsiteDeployPreviewHub';
import { useWebsiteHubActivity } from './useWebsiteHubActivity';
import { useWebsiteHubPerformance } from './useWebsiteHubPerformance';
import { useWebsiteOnboardingHub } from './useWebsiteOnboardingHub';

/** Códigos de categoria que usam menu website e este checklist. */
export const WEBSITE_TIPOLOGICO_CODIGOS = new Set([
    'website',
    'website_wordpress',
    'website_personalizado',
    'aplicacao_react',
]);

export type WebsiteOnboardingHubBlockProps = {
    projetoId: string;
    projeto: Projeto;
    /** Tecnologias do projeto (alternativa a stack_id no checklist React). */
    tecnologiasCount?: number;
};

/** True quando o hub deve mostrar o checklist go-live website. */
export function isWebsiteTipologicoProjeto(projeto: Projeto | null | undefined): boolean {
    const codigo = projeto?.categoria_projeto?.codigo;
    return Boolean(codigo && WEBSITE_TIPOLOGICO_CODIGOS.has(codigo));
}

/**
 * Website: Objetivo → Páginas → DNS → Sprint.
 * React (TASK-APR-036): Stack → Git → Sprint + gate Git (APR-038).
 */
export function WebsiteOnboardingHubBlock({
    projetoId,
    projeto,
    tecnologiasCount = 0,
}: WebsiteOnboardingHubBlockProps) {
    const { checklist, isLoading, isAplicacaoReact, isFilhoFrontEnd } = useWebsiteOnboardingHub({
        projetoId,
        projeto,
        enabled: true,
        tecnologiasCount,
    });

    const deployPreviewState = useWebsiteDeployPreviewHub({
        projetoId,
        enabled: true,
    });

    const activityState = useWebsiteHubActivity({
        projetoId,
        enabled: true,
        previewLimit: 3,
    });

    const tipologiaCodigo = projeto.categoria_projeto?.codigo;
    const tipologiaMeta = resolveWebsiteTipologiaHubMeta(tipologiaCodigo, projetoId);
    const showFronteiraAplicacaoReact = tipologiaCodigo === 'aplicacao_react';
    /**
     * TASK-APR-034 — tipológico React: sem card Performance/CWV no hub
     * (menu S3 já sem SEO/Performance; evita placeholder residual).
     */
    const showPerformanceCard = !showFronteiraAplicacaoReact;

    const performanceState = useWebsiteHubPerformance({
        projetoId,
        enabled: showPerformanceCard,
        pilotPsiOff: false,
    });

    return (
        <div className={scStyles.hubBlock} data-testid="website-onboarding-hub-block">
            {showFronteiraAplicacaoReact ? <AplicacaoReactFronteiraHubAlert /> : null}
            <Row gutter={[24, 16]}>
                <Col xs={24} md={showPerformanceCard ? 14 : 24} lg={showPerformanceCard ? 14 : 16}>
                    <WebsiteOnboardingChecklistCard
                        projetoId={projetoId}
                        checklist={checklist}
                        loading={isLoading}
                        tipologiaMeta={tipologiaMeta}
                        showGitAdiar={isAplicacaoReact}
                        isFilhoFrontEnd={isFilhoFrontEnd}
                    />
                </Col>
                <Col xs={24} md={showPerformanceCard ? 10 : 24} lg={showPerformanceCard ? 10 : 8}>
                    <WebsiteDeployPreviewCard projetoId={projetoId} state={deployPreviewState} />
                </Col>
                <Col xs={24} md={showPerformanceCard ? 12 : 24}>
                    <WebsiteHubActivityCard projetoId={projetoId} state={activityState} />
                </Col>
                {showPerformanceCard ? (
                    <Col xs={24} md={12}>
                        <WebsiteHubPerformanceCard projetoId={projetoId} state={performanceState} />
                    </Col>
                ) : null}
            </Row>
        </div>
    );
}
