import { Command } from 'commander';
import { Portal, Agent } from 'plazbot';
import { getStoredCredentials } from '../../utils/credentials';
import { logger } from '../../utils/logger';
import { AddAgentToPortalOptions } from '../../types/portal';

export const addAgentCommand = new Command('add-agent-portal')
  .description('Agrega un agente existente a un portal')
  .requiredOption('-p, --portal-id <portalId>', 'ID del portal')
  .requiredOption('-a, --agent-id <agentId>', 'ID del agente a agregar')
  .option('--dev', 'Usar ambiente de desarrollo', false)
  .action(async (options: AddAgentToPortalOptions) => {
    try {
      // Obtener credenciales guardadas
      const credentials = await getStoredCredentials();
      
      const portal = new Portal({
        workspaceId: credentials.workspace,
        apiKey: credentials.apiKey,
        zone: credentials.zone,
        ...(options.dev && { customUrl: "http://localhost:5090" })
      });

      // Obtener detalles del portal
      const portalDetails = await portal.getPortal(options.portalId);
      
      // Crear instancia del agente para obtener sus detalles
      const agent = new Agent({
        workspaceId: credentials.workspace,
        apiKey: credentials.apiKey,
        zone: credentials.zone,
        ...(options.dev && { customUrl: "http://localhost:5090" })
      });

      // Obtener detalles del agente
      const agentDetails = await agent.getAgentById({ id: options.agentId });

      logger.info('\n📎 Detalles de la operación:');
      logger.divider();
      logger.info('Portal:');
      logger.info(`  ID: ${portalDetails.portal.id}`);
      logger.info(`  Nombre: ${portalDetails.portal.name}`);
      logger.info('\nAgente:');
      logger.info(`  ID: ${agentDetails.agent.id}`);
      logger.info(`  Nombre: ${agentDetails.agent.name}`);
      logger.divider();

      logger.info('\n🔄 Agregando agente al portal...');
      
      await portal.addAgentToPortal({
        portalId: options.portalId,
        id: options.agentId
      });

      logger.success('Agente agregado exitosamente al portal');
      
      if (options.dev) {
        logger.warning('Ambiente: desarrollo');
      }

    } catch (error) {
      const message = error instanceof Error ? error.message : 'Error desconocido';
      logger.error(message);
      process.exit(1);
    }
  }); 