import { HttpClient } from '@angular/common/http'; import { Component, Inject, OnInit } from '@angular/core'; import { FormGroup, FormBuilder, Validators } from '@angular/forms'; import {MatDialogRef, MAT_DIALOG_DATA, MatDialog} from '@angular/material/dialog'; import { ToastrService } from 'ngx-toastr'; import {DeleteModalComponent} from "../../../../shared/delete_modal/delete-modal/delete-modal.component"; @Component({ selector: 'app-create-pxe-template', templateUrl: './create-pxe-template.component.html', styleUrls: ['./create-pxe-template.component.css'] }) export class CreatePxeTemplateComponent implements OnInit { baseUrl: string = import.meta.env.NG_APP_BASE_API_URL; templateForm!: FormGroup; previewContent: string = ''; isEditMode: boolean = false; clients: any[] = []; constructor( public dialogRef: MatDialogRef, public dialog: MatDialog, private http: HttpClient, private fb: FormBuilder, private toastService: ToastrService, @Inject(MAT_DIALOG_DATA) public data: any ) {} ngOnInit() { this.isEditMode = !!this.data; if (this.isEditMode){ this.getPxeClients() } this.templateForm = this.fb.group({ name: [this.data?.name || '', Validators.required], templateContent: [this.data?.templateContent || '', Validators.required] }); } onSave(): void { if (this.isEditMode) { this.updatePxeTemplate(); } else { this.createPxeTemplate(); } } getPxeClients(): void { this.http.get(`${this.baseUrl}/clients?template.id=${this.data.id}`).subscribe({ next: data => { this.clients = data['hydra:member'] }, error: error => { console.error('Error al obtener los clientes PXE:', error); } }); } createPxeTemplate(): void { const formValues = this.templateForm.value; const payload = { name: formValues.name, templateContent: formValues.templateContent }; this.http.post(`${this.baseUrl}/pxe-templates`, payload).subscribe({ next: data => { console.log('Plantilla PXE creada:', data); this.toastService.success('Plantilla PXE creada exitosamente'); this.dialogRef.close(true); }, error: error => { console.error('Error al crear la plantilla PXE:', error); this.toastService.error('Error al crear la plantilla PXE'); this.dialogRef.close(false); } }); } updatePxeTemplate(): void { const formValues = this.templateForm.value; const payload = { name: formValues.name, templateContent: formValues.templateContent }; this.http.patch(`${this.baseUrl}/pxe-templates/${this.data.uuid}`, payload).subscribe({ next: data => { this.toastService.success('Plantilla PXE actualizada exitosamente'); this.dialogRef.close(true); }, error: error => { this.toastService.error('Error al actualizar la plantilla PXE'); this.dialogRef.close(false); } }); } addClientToTemplate(client: any): void { const postData = { client: client['@id'] }; this.http.post(`${this.baseUrl}/pxe-templates/${this.data.uuid}/sync-client`, postData).subscribe( response => { this.toastService.success('Clientes asignados correctamente'); }, error => { this.toastService.error(error.error['hydra:description']); } ); } deleteClient(client: any): void { const dialogRef = this.dialog.open(DeleteModalComponent, { width: '300px', data: { name: client.name } }); dialogRef.afterClosed().subscribe(result => { if (result) { this.http.post(`${this.baseUrl}/pxe-templates/${this.data.uuid}/delete-client`, { client: client['@id'] }).subscribe({ next: () => { this.toastService.success('Cliente eliminado exitosamente'); this.dialogRef.close(); }, error: (error) => { this.toastService.error(error.error['hydra:description']); } }); }}) } onCancel(): void { this.dialogRef.close(false); } }