import { Component, Input, OnInit } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { Router } from "@angular/router"; import { ToastrService } from "ngx-toastr"; import { ConfigService } from '@services/config.service'; @Component({ selector: 'app-execute-command', templateUrl: './execute-command.component.html', styleUrls: ['./execute-command.component.css'] }) export class ExecuteCommandComponent implements OnInit { @Input() clientData: any[] = []; @Input() buttonType: 'icon' | 'text' = 'icon'; @Input() buttonText: string = 'Ejecutar Comandos'; @Input() icon: string = 'terminal'; @Input() disabled: boolean = false; baseUrl: string; loading: boolean = true; arrayCommands: any[] = [ { name: 'Enceder', slug: 'power-on', disabled: false }, { name: 'Apagar', slug: 'power-off', disabled: false }, { name: 'Reiniciar', slug: 'reboot', disabled: false }, { name: 'Iniciar Sesión', slug: 'login', disabled: true }, { name: 'Crear imagen', slug: 'create-image', disabled: false }, { name: 'Clonar/desplegar imagen', slug: 'deploy-image', disabled: false }, { name: 'Eliminar Imagen Cache', slug: 'delete-image-cache', disabled: true }, { name: 'Particionar y Formatear', slug: 'partition', disabled: false }, { name: 'Inventario Software', slug: 'software-inventory', disabled: true }, { name: 'Inventario Hardware', slug: 'hardware-inventory', disabled: true }, { name: 'Ejecutar script', slug: 'run-script', disabled: true }, ]; client: any = {}; constructor( private http: HttpClient, private router: Router, private configService: ConfigService, private toastService: ToastrService ) { this.baseUrl = this.configService.apiUrl; } ngOnInit(): void { this.clientData = this.clientData || []; } onCommandSelect(action: any): void { if (action === 'partition') { this.openPartitionAssistant(); } if (action === 'create-image') { this.openCreateImageAssistant(); } if (action === 'deploy-image') { this.openDeployImageAssistant(); } if (action === 'reboot') { this.rebootClient(); } if (action === 'power-off') { this.powerOffClient(); } if (action === 'power-on') { this.powerOnClient(); } } rebootClient(): void { this.http.post(`${this.baseUrl}/clients/server/reboot`, { clients: this.clientData.map((client: any) => client['@id']) }).subscribe( response => { this.toastService.success('Cliente actualizado correctamente'); }, error => { this.toastService.error('Error de conexión con el cliente'); } ); } powerOnClient(): void { this.http.post(`${this.baseUrl}/image-repositories/wol`, { clients: this.clientData.map((client: any) => client['@id']) }).subscribe( response => { this.toastService.success('Petición de encendido enviada correctamente'); }, error => { this.toastService.error('Error de conexión con el cliente'); } ); } powerOffClient(): void { this.http.post(`${this.baseUrl}/clients/server/power-off`, { clients: this.clientData.map((client: any) => client['@id']) }).subscribe( response => { this.toastService.success('Petición de apagado enviada correctamente'); }, error => { this.toastService.error('Error de conexión con el cliente'); } ); } openPartitionAssistant(): void { this.router.navigate(['/clients/partition-assistant'], { state: { clientData: this.clientData }, }).then(r => { console.log('Navigated to partition assistant with data:', this.clientData); }); } openCreateImageAssistant(): void { this.router.navigate([`/clients/${this.clientData[0].uuid}/create-image`]).then(r => { console.log('navigated', r); }); } openDeployImageAssistant(): void { this.router.navigate(['/clients/deploy-image'], { state: { clientData: this.clientData }, }).then(r => { console.log('Navigated to deploy image with data:', this.clientData); }); } }