import { Component, ElementRef, EventEmitter, Output, ViewChild, Input, OnChanges, SimpleChanges } from '@angular/core';
import { CepService } from 'src/app/services/cep/cep.service';
import { UnidSaudeService } from 'src/app/services/unidSaude/unid-saude.service';
import { Unidade } from 'src/app/models/unidSaude/unidade.model';
import { MatDialog } from '@angular/material/dialog';
import { CadDialogComponent } from '../cad-dialog/cad-dialog.component';

@Component({
  selector: 'app-cad-unidade',
  templateUrl: './cad-unidade.component.html',
  styleUrls: ['./cad-unidade.component.css']
})
export class CadUnidadeComponent implements OnChanges {
  @Input() isOpen = false;

  cep: string = ''
  cidade: string = ''
  uf: string = ''
  id : number = 0
  nome: string = ''
  cnes : string = ''
  email : string = ''
  password : string = ''
  passwordConfirm : string = ''

  @Output() cadastrarUnidadeEmitter: EventEmitter<Unidade> = new EventEmitter<Unidade>();
  hide : boolean = true

  @ViewChild('container') containerRef!: ElementRef<HTMLDivElement>;
  maxHeight = 0;

  constructor(private readonly cepService: CepService, private readonly unidService : UnidSaudeService, private dialog: MatDialog) {}

  ngOnChanges(changes: SimpleChanges): void {
    if (changes['isOpen']) {
      this.toggleContainer(changes['isOpen'].currentValue ?? false);
    }
  }

  toggleContainer(shouldShow: boolean) {
    if (!this.containerRef?.nativeElement) return;
    const container = this.containerRef.nativeElement;

    this.maxHeight = shouldShow ? 455 : 0;
  }

  buscarCep() {
    this.cepService.buscarCeps(this.cep).subscribe({
      next: (cepDetails: any) => {
        this.cep = cepDetails.cep;
        this.cidade = cepDetails.localidade;
        this.uf = cepDetails.uf;
      },
      error: (err: any) => {
        console.error(err);
        this.cep = '';
        this.cidade = '';
        this.uf = '';
      },
    });
  }

  validarCampos(){
    return this.nome.trim().length > 0 && 
    this.cnes.trim().length > 0 && 
    this.email.trim().length > 0 && 
    this.cidade.trim().length > 0 &&
    this.uf.trim().length > 0 && 
    this.password.trim().length > 0 && 
    this.passwordConfirm.trim().length > 0 &&
    this.password == this.passwordConfirm
  }

 cadastrarUnidade()
 {
  if(this.validarCampos()){
   let u : Unidade = { id : 0, nomeInstituicao : this.nome, cnes : this.cnes, cidade: this.cidade, uf: this.uf, email : this.email, senha : this.password }
   this.cadastrarUnidadeEmitter.emit(u);
  }
 }
  showHide(){
    this.hide = !this.hide
  }

  openDialog() {
    const dialogRef = this.dialog.open(CadDialogComponent, {
      width: '400px',
      height: '150px'
    })

    dialogRef.afterClosed().subscribe((result) => {
      if(result === true){
        this.cadastrarUnidade()
      }
      else{
        console.log('Erro ao cadastrar unidade')
      }
    })
  }
}
