import { Component, OnInit } from '@angular/core';
import { UsuariosService } from '../../../services/usuarios.service';
import { Usuarios } from '../../../models/usuarios.model';
import { FormsModule } from '@angular/forms';
import { CommonModule } from '@angular/common';
import { RouterModule } from '@angular/router';
import { HttpClient } from '@angular/common/http';
import { provideNgxMask, NgxMaskDirective } from 'ngx-mask';

@Component({
  selector: 'app-listar-usuarios',
  standalone: true,
  imports: [
    FormsModule,
    CommonModule,
    RouterModule,
    NgxMaskDirective
  ],
  providers: [provideNgxMask()],
  templateUrl: './listar-usuarios.component.html',
  styleUrls: ['./listar-usuarios.component.css']
})
export class ListarUsuariosComponent implements OnInit {
  usuarios: Usuarios[] = [];
  usuariosFiltrados: Usuarios[] = [];
  filtroNome: string = '';
  filtroPerfil: string = 'Funcionário';
  usuarioLogadoId?: number;

  constructor(
    private usuariosService: UsuariosService
  ) {}

  ngOnInit(): void {
    this.usuarioLogadoId = this.obterUsuarioLogadoId();
    this.carregarUsuarios();
  }
  
  carregarUsuarios(): void {
    this.usuariosService.listarUsuarios().subscribe({
      next: (usuarios) => {
        console.log('Usuários recebidos:', usuarios);
        this.usuarios = usuarios;
        this.filtrarUsuarios();  // Garanta que o filtro seja chamado após o carregamento
      },
      error: (err) => {
        console.error('Erro ao carregar usuários:', err);
      }
    });
  }

  alternarFiltroPerfil(): void {
    // Se o filtro atual for 'FUNCIONARIO', mude para 'ADMINISTRADOR', e vice-versa
    if (this.filtroPerfil === 'Funcionário') {
      this.filtroPerfil = 'Administrador';
    } else {
      this.filtroPerfil = 'Funcionário';
    }
  
    console.log('Filtro de perfil alterado para:', this.filtroPerfil);
    this.filtrarUsuarios();
  }
  
  filtrarUsuarios(): void {
    console.log('Filtro de nome:', this.filtroNome);
    console.log('Filtro de perfil:', this.filtroPerfil);
  
    this.usuariosFiltrados = this.usuarios.filter(usuario => {
      const filtroPerfilValido = (this.filtroPerfil === '' || 
        (usuario.perfil && usuario.perfil.toUpperCase().includes(this.filtroPerfil.toUpperCase())));
  
      const filtroNomeValido = usuario.nome?.toLowerCase().includes(this.filtroNome.toLowerCase()) ?? false;
  
      return filtroPerfilValido && filtroNomeValido;
    });
  
    console.log('Usuários filtrados:', this.usuariosFiltrados);
  }

  obterUsuarioLogadoId(): number | undefined {
    const userStr = localStorage.getItem('currentUser');
    if (userStr) {
      try {
        const userObj = JSON.parse(userStr);
        return userObj.id;
      } catch (e) {
        console.error('Erro ao ler currentUser do localStorage:', e);
      }
    }
    return undefined;
  }

  remover($event: any, usuario: Usuarios): void {
    $event.preventDefault();
    if (confirm(`Deseja excluir o usuário ${usuario.nome}?`)) {
      this.usuariosService.removerUsuario(usuario.id!).subscribe({
        next: () => {
          // Remover o usuário da lista local após a exclusão
          this.usuarios = this.usuarios.filter(u => u.id !== usuario.id);
          this.filtrarUsuarios();  // Reaplicar o filtro após remoção
          alert(`Usuário ${usuario.nome} removido com sucesso.`);
        },
        error: (err) => {
          console.error('Erro ao remover o usuário:', err);
          alert('Erro ao remover o usuário.');
        }
      });
    }
  }

  formatarCPF(cpf: string | number | undefined): string {
    if (cpf === undefined || cpf === null) return '';
    const cpfStr = cpf.toString().replace(/\D/g, ''); // converte para string e limpa não dígitos
    if (cpfStr.length !== 11) return cpfStr;
    return cpfStr.replace(/(\d{3})(\d{3})(\d{3})(\d{2})/, '$1.$2.$3-$4');
  }
}
