'use client';

import { Eye, Play } from 'lucide-react';
import { ICON_SIZE_MD } from '@/components/icons';
import React from 'react';
import { ModalOpcoesBase, type ModalOpcaoAction } from '@/components/ModalOpcoesBase';

export interface ModalOpcoesTesteItem {
    id: number;
    nome: string;
    tipo?: string;
    status?: string;
    projeto?: { nome: string };
}

export interface ModalOpcoesTesteProps {
    open: boolean;
    onClose: () => void;
    item: ModalOpcoesTesteItem | null;
    onVerDetalhes: (item: ModalOpcoesTesteItem) => void;
    onExecutar?: (item: ModalOpcoesTesteItem) => void;
    /** Execução em curso na API: mantém o modal aberto com spinner e impede duplo envio. */
    executando?: boolean;
}

export function ModalOpcoesTeste({
    open,
    onClose,
    item,
    onVerDetalhes,
    onExecutar,
    executando = false}: ModalOpcoesTesteProps) {
    if (!item) return null;
    const subtitle = [item.nome, item.tipo, item.status].filter(Boolean).join(' · ');
    const actions: ModalOpcaoAction[] = [
        {
            key: 'ver',
            label: 'Ver detalhes',
            icon: <Eye size={ICON_SIZE_MD} aria-hidden />,
            onClick: () => {
                onClose();
                onVerDetalhes(item);
            },
            primary: true},
    ];
    if (onExecutar) {
        actions.push({
            key: 'executar',
            label: 'Executar',
            icon: <Play size={ICON_SIZE_MD} aria-hidden />,
            /** O modal fecha só depois da resposta da API (o pai controla), para o operador ver o resultado. */
            onClick: () => onExecutar(item),
            loading: executando,
            disabled: executando,
            testId: 'projeto-qualidade-teste-opcoes-executar'});
    }
    return (
        <ModalOpcoesBase
            open={open}
            onClose={onClose}
            title="Opções do teste"
            subtitle={subtitle}
            actions={actions}
            loading={executando}
            width={380}
            data-testid="projeto-qualidade-teste-opcoes-modal"
            aria-label="Opções do teste"
        />
    );
}
