import { CommonModule } from '@angular/common';
import { Component, inject, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { HttpClient} from '@angular/common/http';
// import { IdtButtonComponent } from 'libs'

import { FormBuilder, FormGroup, Validators, ReactiveFormsModule } from '@angular/forms';
import { AuthService } from '../../../shared/services/auth/auth.service';

@Component({
    selector: 'app-signin',
    standalone: true,
    templateUrl: './signin.component.html',
    styleUrl: './signin.component.scss',
    imports: [CommonModule, ReactiveFormsModule]
})
export class SigninComponent implements OnInit {
    private router = inject(Router);
    private http = inject(HttpClient);
    private authService = inject(AuthService);

    loginForm: FormGroup;
    hidePassword = true;
    isDarkMode = false;
    backgroundImageUrl = 'assets/background.png'; //'https://images.unsplash.com/photo-1601584115197-04ecc0da31d7?ixlib=rb-1.2.1&auto=format&fit=crop&w=1950&q=80';
    logo = 'assets/logo.png';
    host = '';
    tenantId: string | null = null;
    isLoading = false;
    errorMessage = '';

    constructor(private fb: FormBuilder) {
      this.loginForm = this.fb.group({
        email: ['', [Validators.required, Validators.email]],
        password: ['', [Validators.required, Validators.minLength(6)]]
      });
      
      // Set initial theme based on time of day
      const currentHour = new Date().getHours();
      this.isDarkMode = currentHour < 6 || currentHour >= 18;
    }
  
    ngOnInit(): void {
      this.host = 'grupopra.prafrota.com.br';
      console.log('Host:', this.host);
      this.fetchTenantInfo();
      
      // 🎯 Não redirecionar automaticamente - deixar usuário escolher
      // Usuário pode querer fazer logout ou trocar de conta
      if (this.authService.isAuthenticated()) {
        console.log('👤 Usuário já está logado, mas permanecendo na tela de login');
        // Opcional: mostrar mensagem ou botão "Continuar logado"
      }
    }
  
    toggleTheme() {
      this.isDarkMode = !this.isDarkMode;
    }
  
    onSubmit() {
      if (this.loginForm.valid) {
        this.onLogin();
      }
    }  
    
    onLogin(): void {
      if (this.loginForm.valid && !this.isLoading) {
        this.isLoading = true;
        this.errorMessage = '';

        const credentials = {
          email: this.loginForm.value.email,
          password: this.loginForm.value.password
        };

        // 🚀 USAR AuthService para fazer login
        this.authService.login(credentials).subscribe({
          next: (response) => {
            console.log('✅ Login realizado com sucesso:', response);
            
            // 🎯 DADOS DO USUÁRIO já estão salvos no AuthService
            const currentUser = this.authService.getCurrentUser();
            console.log('👤 Usuário logado:', currentUser);
            
            // 🏠 Redirecionar para dashboard
            this.router.navigate(['/app/dashboard']);
          },
          error: (error) => {
            console.error('❌ Erro no login:', error);
            this.errorMessage = error.message || 'Erro ao fazer login. Verifique suas credenciais.';
            this.isLoading = false;
          },
          complete: () => {
            this.isLoading = false;
          }
        });
      } else {
        this.markFormGroupTouched();
      }
    }

    private markFormGroupTouched(): void {
      Object.keys(this.loginForm.controls).forEach(key => {
        this.loginForm.get(key)?.markAsTouched();
      });
    }

    // 🎯 EXEMPLO: Acessar dados do usuário em qualquer lugar
    getCurrentUserInfo(): void {
      const userId = this.authService.getCurrentUserId();
      const userEmail = this.authService.getCurrentUserEmail();
      const accessLevel = this.authService.getCurrentUserAccessLevel();
      
      console.log('🆔 ID do usuário:', userId);
      console.log('📧 Email:', userEmail);
      console.log('🔐 Nível de acesso:', accessLevel);
    }

    // 🎯 EXEMPLO: Verificar permissões
    checkPermissions(): void {
      const canEditUsers = this.authService.hasPermission('edit_users');
      const isAdmin = this.authService.hasMinimumAccessLevel('admin');
      
      console.log('✏️ Pode editar usuários:', canEditUsers);
      console.log('👑 É administrador:', isAdmin);
    }

    private getHostFromUrl(): string {
      return window.location.host;
    }
    private fetchTenantInfo() {
      const url = `https://prafrota-be-bff-tenant-api.grupopra.tech/public/getTenantBasicInfoByDomain?domain=${this.host}`;
      this.http.get<{ data: { uuid: string }}>(url).subscribe({
          next: (response) => {
              this.tenantId = response.data.uuid;
              // Salvar o tenant_id no localStorage
              localStorage.setItem('tenant_id', this.tenantId);
              console.log('Tenant ID obtido e salvo:', this.tenantId);
          },
          error: (error) => {
              console.error('Erro ao obter informações do tenant:', error);
          }
      });
    }

    // 🚪 Método para fazer logout e limpar dados (útil para testes)
    onLogout(): void {
      this.authService.logout();
      console.log('🚪 Logout realizado, dados limpos');
    }

    // 🎯 Verificar se usuário está logado (para mostrar botões condicionais)
    isLoggedIn(): boolean {
      return this.authService.isAuthenticated();
    }

    // 🏠 Ir para dashboard se já estiver logado
    goToDashboard(): void {
      if (this.authService.isAuthenticated()) {
        this.router.navigate(['/app/dashboard']);
      }
    }
}
