import { Injectable } from '@angular/core';
import * as CryptoJS from 'crypto-js';
import { Unidade } from 'src/app/models/unidSaude/unidade.model';
import { HttpClient } from '@angular/common/http';
import { Observable, elementAt } from 'rxjs';
import { Router } from '@angular/router';

@Injectable({
  providedIn: 'root'
})
export class LoginService {
  private storage : Storage
  private unidades : Unidade[] = []
  private User : Unidade = {}
  private isLoginValido : boolean = false
  public isCNESValido : boolean = false
  public isEmailValido : boolean = false
  public isSenhaValido : boolean = false
  public errorMessage: string = ''

  private readonly apiY = 'https://3000-yasmimtcc-3egb2023tcche-jzxp8591avr.ws-us106.gitpod.io';

  constructor(private _http: HttpClient, private readonly router : Router) { 
    this.storage = window.localStorage;

    this.getAllUnidSaude().subscribe({
      next: (unid : any) => {
        if(unid.length > 1)
        {
          this.unidades = unid
        }
      }
    })
  }

  getAllUnidSaude(): Observable<any>{
    return this._http.get<any>(`${this.apiY}/unid-saude`)
  }

  verificarSenha(senha : string)
  {
    for(var unidS of this.unidades) 
    {
      if(senha === unidS.senha?.toString())
      {
        this.isSenhaValido = true
        break
      }
      else
      {
        this.isSenhaValido = false
      }
    }  
    return this.isSenhaValido
  }

  verificarCNES(cnes : string)
  {
    for(var unidS of this.unidades) 
    {
      if(cnes === unidS.cnes?.toString())
      {
        this.isCNESValido = true
        break
      }
      else
      {
        console.log("CNES inválido")
        this.isCNESValido = false
      }
    }  
    return this.isCNESValido
  }
  verificarEmail(email : string)
  {
    for(var unidS of this.unidades) 
    {
      if(email === unidS.email?.toString())
      {
        this.isEmailValido = true
        break
      }
      else
      {
        console.log("E-mail inválido")
        this.isEmailValido = false
      }
    }  
    return this.isEmailValido
  }

  verificarLogin(cnes : string, senha : string, email : string)
  {
    if(this.verificarCNES(cnes) && this.verificarEmail(email) && this.verificarSenha(senha))
    {
      if(this.unidades.find((unid) => unid.cnes == cnes) != undefined)
      {
        var user = this.unidades.find((unid) => unid.cnes == cnes) 
      }
      this.User = user as unknown as Unidade
      this.isLoginValido = true
    }
    else 
    {
      this.isLoginValido = false
    }

    if (!this.isLoginValido) {
      this.errorMessage = 'Credenciais inválidas!';
    }

    return this.isLoginValido
  }
  
  logar(unid : Unidade){
    if(unid.cnes != undefined && unid.senha != undefined && unid.email != undefined)
    {
      if(this.verificarLogin(unid.cnes, unid.senha, unid.email))
      {
        this.storage.setItem('User', JSON.stringify(this.User))
        if (this.User.id !== undefined) {
          this.storage.setItem('UserId', this.User.id.toString());
        }
        this.router.navigate(['/homePrivada'])
      }
      else
      {
        // return GHLJdlAHÇGLJHALJG queria fazer algo mais visual se nao deu o login...
        // mas posso testar? testar oq teste
      }
    }
    
  }

}
