import { Component, OnDestroy, OnInit } from '@angular/core';
import { Router, NavigationEnd } from '@angular/router';
import { filter, Subscription } from 'rxjs';
import { NgClass, CommonModule } from '@angular/common';
import { AuthService, User } from '../services/auth.service';

enum Perfil {
  ADMIN = 'ADMIN',
  FUNCIONARIO = 'FUNCIONARIO',
  NAO_LOGADO = 'NAO_LOGADO'
}

@Component({
  selector: 'app-navbar',
  standalone: true,
  imports: [CommonModule, NgClass],
  templateUrl: './navbar.component.html',
  styleUrls: ['./navbar.component.css'],
})
export class NavbarComponent implements OnInit, OnDestroy {
  currentRoute: string = '';

  currentUser: User | null = null;
  perfilAtual: Perfil = Perfil.NAO_LOGADO;
  private authSubscription: Subscription | undefined;


  constructor(
    private router: Router,
    private authService: AuthService
  ) { }

    // Métodos para obter classes dos ícones para Admin
    getAdminIconClass(label: string): string {
      switch(label) {
        case 'Dashboard': return 'fas fa-home';
        case 'Usuários': return 'fas fa-user';
        case 'Material': return 'fas fa-book';
        case 'Questionários': return 'fas fa-question-circle';
        case 'Relatórios': return 'fas fa-file-alt';
        default: return '';
      }
    }

    // Métodos para obter classes dos ícones para Funcionário
    getFuncionarioIconClass(label: string): string {
      switch(label) {
        case 'Dashboard': return 'fas fa-home';
        case 'Histórico de Check-Ins': return 'fas fa-clock';
        case 'Material de Apoio': return 'fas fa-book';
        case 'Questionários': return 'fas fa-question-circle';
        default: return '';
      }
    }

  ngOnInit() {
    // 1. Assinar para mudanças no usuário logado
    this.currentRoute = this.router.url;
    this.authSubscription = this.authService.currentUser.subscribe(user => {
      this.currentUser = user;
      if (user && user.role) {
        if (user.role.includes('ADM')) {
          this.perfilAtual = Perfil.ADMIN;
        } else if (user.role.includes('FUNC')) { // ou 'FUNCIONARIO' se seu backend retornar isso
          this.perfilAtual = Perfil.FUNCIONARIO;
        } else {
          this.perfilAtual = Perfil.NAO_LOGADO; // Caso um perfil desconhecido
        }
      } else {
        this.perfilAtual = Perfil.NAO_LOGADO;
      }
      console.log('Perfil atualizado:', this.perfilAtual);
    });
    this.router.events
      .pipe(filter(event => event instanceof NavigationEnd))
      .subscribe((event: NavigationEnd) => {
        this.currentRoute = (event as NavigationEnd).urlAfterRedirects;
        console.log('Rota atual para classe:', this.currentRoute);
      });
  }

  ngOnDestroy(): void {
    if (this.authSubscription) {
      this.authSubscription.unsubscribe();
    }
  }

  logout(): void {
    this.authService.logout();
  }

  adminRotas = [
    { rota: '/dashboardadmin', label: 'Dashboard' },
    { rota: '/usuarios', label: 'Usuários' },
    { rota: '/material', label: 'Material' },
    { rota: '/questionario', label: 'Questionários' },
    { rota: '/relatorios', label: 'Relatórios' },
  ];

  funcionarioRotas = [
    { rota: '/dashboardusuario', label: 'Dashboard' },
    { rota: '/historico', label: 'Histórico de Check-Ins' },
    { rota: '/materialfuncionario', label: 'Material de Apoio' },
    { rota: '/listar', label: 'Questionários' },
  ];

  rotasComuns = [
    //{ rota: '/login', label: 'Login' },
    //{ rota: '/login/recuperar', label: 'Recuperar' },
    { rota: '/logout', label: 'Logout' },
  ];

  getNavbarClass(): string {
    const route = this.currentRoute.split('?')[0]; // remove query string

    const funcionarioRotas = [
      '/dashboardusuario',
      '/historico',
      '/materialfuncionario',
      '/listar',
      '/responder'
    ];

    const adminRotas = [
      '/usuarios',
      '/usuarios/novo',
      '/usuarios/editar/:id',
      '/dashboardadmin',
      '/material',
      '/material/novo',
      '/material/editar/:id',
      '/questionario',
      '/questionario/novo',
      '/questionario/editar/:id',
      '/relatorios'
    ];


    const loginRotas = [
      '/logout'
    ];

    if (funcionarioRotas.some(r => route.startsWith(r))) return 'bg-dashboard';
    if (adminRotas.some(r => route.startsWith(r))) return 'bg-usuario';
    if (loginRotas.some(r => route.startsWith(r))) return 'bg-login';

    return '';
  }

  getButtonClass(route: string): string {
    const adminRotas = [
      '/usuarios',
      '/dashboardadmin',
      '/material',
      '/questionario',
      '/relatorios'
    ];

    const funcionarioRotas = [
      '/dashboardusuario',
      '/historico',
      '/materialfuncionario',
      '/listar'
    ];

    const loginRotas = [
      //'/login',
      //'/login/recuperar',
      '/logout'
    ];

    // Comparação exata
    if (adminRotas.includes(route)) {
      return 'btn-usuario';
    }

    if (funcionarioRotas.includes(route)) {
      return 'btn-dashboard';
    }

    if (loginRotas.includes(route)) {
      return 'btn-login';
    }

    return 'btn-outline';
  }

  navigateTo(route: string) {
    this.router.navigate([route]);
  }
}
