import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { ActivatedRoute, Router } from '@angular/router';
import { AeropuertosService } from '../../services/aeropuertos.service';
import Swal from 'sweetalert2';

@Component({
  selector: 'app-agregar',
  templateUrl: './agregar.component.html',
  styleUrls: ['./agregar.component.css']
})
export class AgregarComponent implements OnInit{

  id: number = 0;
  tipoBoton: string = 'Agregar';

  aeropuertoForm: FormGroup = this.formBuilder.group({
    codigo: [ '' , [ Validators.required] ],
    nombre: [ '' , [ Validators.required] ],
    localizacion:[ '' , [ Validators.required    ] ],
    detalles:[ '' , [ Validators.required    ] ]
  })

  constructor(
    private formBuilder: FormBuilder,
    private aeropuertosService: AeropuertosService,
    private activateRoute: ActivatedRoute,
    private router: Router
  ){}  

  ngOnInit(): void {
    if (this.router.url.includes('editar')) {
      this.id = this.activateRoute.snapshot.params['id'];
      this.tipoBoton="Actualizar";
      this.llenarFormulario();
    }
  }

  guardar(){
    if (this.aeropuertoForm.invalid)  {
      this.aeropuertoForm.markAllAsTouched();
      return;
    }

    if (!this.id) {
      this.crearAeropuerto();
      this.aeropuertoForm.reset();
    } else {                          
      this.actualizarAeropuerto();
    }

  }

  private crearAeropuerto(){
    this.aeropuertosService.addAeropuerto(this.aeropuertoForm.value).subscribe(
      res => {
        this.irAlListado();
        
        const Toast = Swal.mixin({
          toast: true,
          position: 'top-end',
          showConfirmButton: false,
          timer: 2000,
          timerProgressBar: true,
          didOpen: (toast) => {
            toast.addEventListener('mouseenter', Swal.stopTimer)
            toast.addEventListener('mouseleave', Swal.resumeTimer)
          }
        })
        Toast.fire({
          icon: 'success',
          title: 'Se agrego correctamente'
        })
      }, err =>{

      }
    )
  }

  private actualizarAeropuerto(){
    this.aeropuertosService.updateAeropuerto(this.id,this.aeropuertoForm.value).subscribe(
      res => {
        this.irAlListado();
        const Toast = Swal.mixin({
          toast: true,
          position: 'top-end',
          showConfirmButton: false,
          timer: 2000,
          timerProgressBar: true,
          didOpen: (toast) => {
            toast.addEventListener('mouseenter', Swal.stopTimer)
            toast.addEventListener('mouseleave', Swal.resumeTimer)
          }
        })
        Toast.fire({
          icon: 'success',
          title: 'Se actualizo correctamente'
        })
      }, err =>{

      }
    )
  }

  private irAlListado(){
    this.router.navigate(['/aeropuertos/listado']);
  }

  private llenarFormulario(){
    this.aeropuertosService.getAeropuerto(this.id).subscribe(
      res => {
        this.aeropuertoForm.patchValue(res);
      },err => {

      }
    )
  }

  getErrorNombre() {
    if (this.aeropuertoForm.controls['nombre'].hasError('required')) {
      return 'Desbes ingresar un nombre';
    }

    return this.aeropuertoForm.controls['nombre'].hasError('email') ? 'Not a valid email' : '';
  }
  getErrorCodigo() {
    if (this.aeropuertoForm.controls['codigo'].hasError('required')) {
      return 'Desbes ingresar un nombre';
    }

    return this.aeropuertoForm.controls['codigo'].hasError('email') ? 'Not a valid email' : '';
  }

  getErrorLocalizacion() {
    if (this.aeropuertoForm.controls['localizacion'].hasError('required')) {
      return 'Desbes ingresar un nombre';
    }

    return this.aeropuertoForm.controls['localizacion'].hasError('email') ? 'Not a valid email' : '';
  }

  getErrorDetalles() {
    if (this.aeropuertoForm.controls['detalles'].hasError('required')) {
      return 'Desbes ingresar un nombre';
    }

    return this.aeropuertoForm.controls['detalles'].hasError('email') ? 'Not a valid email' : '';
  }



}
