import { Component, OnInit } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import {
  AuthService,
  RegisterRequest,
  Rol
} from '../../services/auth';
import { Router } from '@angular/router';

@Component({
  selector: 'app-usuarios',
  standalone: true,
  imports: [CommonModule, FormsModule],
  templateUrl: './usuarios.html',
  styleUrls: ['./usuarios.css'],
})
export class UsuariosComponent implements OnInit {

  usuarios: any[] = [];
  roles: Rol[] = [];

  cargandoUsuarios = false;
  errorUsuarios: string | null = null;

  creando = false;
  mensaje: string | null = null;
  errorCrear: string | null = null;

  sedesTexto = ''; // para administrativos, codigos separados por coma

  nuevoUsuario: RegisterRequest = {
    username: '',
    email: '',
    password: '',
    nombre_completo: '',
    id_rol: 2,   // por defecto administrativo_sede
    sedes: []
  };

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

  ngOnInit(): void {
    // si no es admin, lo saco
    if (!this.authService.isAdministrador()) {
      this.router.navigate(['/dashboard']);
      return;
    }

    this.cargarRoles();
    this.cargarUsuarios();
  }

  cargarRoles(): void {
    this.authService.getRoles().subscribe({
      next: (roles) => {
        this.roles = roles;
      },
      error: (err) => {
        console.error(err);
      }
    });
  }

  cargarUsuarios(): void {
    this.cargandoUsuarios = true;
    this.errorUsuarios = null;

    this.authService.getUsuarios().subscribe({
      next: (usuarios) => {
        this.usuarios = usuarios;
        this.cargandoUsuarios = false;
      },
      error: (err) => {
        console.error(err);
        this.errorUsuarios = 'Error cargando usuarios.';
        this.cargandoUsuarios = false;
      }
    });
  }

  crearUsuario(): void {
    this.errorCrear = null;
    this.mensaje = null;

    if (!this.nuevoUsuario.username ||
        !this.nuevoUsuario.email ||
        !this.nuevoUsuario.password ||
        !this.nuevoUsuario.nombre_completo) {
      this.errorCrear = 'Completa todos los campos obligatorios.';
      return;
    }

    // Si es administrativo de sede (id_rol = 2) procesamos las sedes
    if (this.nuevoUsuario.id_rol === 2) {
      const codigos = this.sedesTexto
        .split(',')
        .map(s => s.trim())
        .filter(s => s.length > 0);

      this.nuevoUsuario.sedes = codigos;
    } else {
      this.nuevoUsuario.sedes = [];
    }

    this.creando = true;

    this.authService.register(this.nuevoUsuario).subscribe({
      next: (resp) => {
        this.mensaje = resp?.mensaje || 'Usuario creado correctamente.';
        this.creando = false;

        // Limpiar formulario
        this.nuevoUsuario = {
          username: '',
          email: '',
          password: '',
          nombre_completo: '',
          id_rol: 2,
          sedes: []
        };
        this.sedesTexto = '';

        // Recargar lista
        this.cargarUsuarios();
      },
      error: (err) => {
        console.error(err);
        this.errorCrear = err?.error?.error || 'Error creando el usuario.';
        this.creando = false;
      }
    });
  }

  cambiarEstadoUsuario(u: any, activo: boolean): void {
    if (!confirm(`¿Seguro que deseas ${activo ? 'activar' : 'desactivar'} al usuario "${u.username}"?`)) {
      return;
    }

    this.authService.actualizarEstadoUsuario(u.id_usuario, activo).subscribe({
      next: () => {
        u.activo = activo;
      },
      error: (err) => {
        console.error(err);
        alert('Error actualizando estado del usuario.');
      }
    });
  }

  volverDashboard(): void {
    this.router.navigate(['/dashboard']);
  }
}
