import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, FormControl, Validators } from '@angular/forms';
import { ActivatedRoute, Router } from '@angular/router';
import { PasajerosService } from '../../services/pasajeros.service';
import { Pasajero } from '../../interfaces/pasajeros.inteface';
import Swal from 'sweetalert2';
import { AuthPasajerosService } from '../../../auth/services/auth-pasajeros.service';

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

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

  pasajeroForm: FormGroup = this.formBuilder.group({
    primerNombre: [ '' , [ Validators.required] ],
    segundoNombre:[ '' , [ Validators.required] ],
    apellido:[ '' , [ Validators.required    ] ],
    telefono:[ '' , [ Validators.required    ] ],
    correo:[ '' , [ Validators.required      ] ],
    direccion:[ '' , [ Validators.required   ] ],
    ciudad:[ '' , [ Validators.required      ] ],
    provincia:[ '' , [ Validators.required   ] ],
    pais:[ '' , [ Validators.required        ] ],
    detalles:[ '' , [ Validators.required    ] ],
  })
  
  constructor(
    private formBuilder: FormBuilder,
    private pasajeroService: PasajerosService,
    private authPasajerosService: AuthPasajerosService,
    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();
    }
  }

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

  guardar(){

    if ( this.pasajeroForm.invalid)  {
      this.pasajeroForm.markAllAsTouched();
      return;
    }
    if(!this.id) {
      this.agregarAuthPasajero();
    }else{
      this.actualizarPasajero();
    }
  }

  agregarAuthPasajero(){
    let query = {
      correo: this.pasajeroForm.value.correo,
      codigo: "1234",
      rol: "pasajero"
    }
    this.authPasajerosService.addPasajeroAuth(query).subscribe(
      res =>  {
        this.idPasajeroAuth = res.id;
        this.crearPasajero(res.id);
      })
  }

  private crearPasajero(idPasajeroAuth: number){

    let data = this.pasajeroForm.value;
    let query = {
      primerNombre: data.primerNombre,
      segundoNombre: data.segundoNombre,
      apellido: data.apellido,
      telefono: data.telefono,
      correo: data.correo,
      direccion: data.direccion,
      ciudad: data.ciudad,
      provincia: data.provincia,
      pais: data.pais,
      detalles: data.detalles,
      pasajeroAuth: {
          id: idPasajeroAuth
      }
    }

    this.pasajeroService.addPasajero(query).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'
        })
      }
    )
  }

  private actualizarPasajero(){
    this.pasajeroService.updatePasajero(this.id,this.pasajeroForm.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'
        })
      }
    )
  }

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

  private llenarFormulario(){
    this.pasajeroService.getPasajero(this.id).subscribe(
      res => {
        this.pasajeroForm.patchValue(res);
      }
    )
  }

}
