import { Injectable, NestMiddleware } from '@nestjs/common';
import { NextFunction, Request, Response } from 'express';
import { UserEmpresasService } from './user-empresas.service';

@Injectable()
export class UserContextMiddleware implements NestMiddleware {
  constructor(private userEmpresasService: UserEmpresasService) {}

  async use(req: Request, res: Response, next: NextFunction) {
    // Solo procesar si hay un usuario autenticado
    if (req.user && typeof req.user === 'object' && 'id' in req.user) {
      try {
        const userId = (req.user as any).id;

        // Obtener empresas asignadas y empresa actual
        const [empresasAsignadas, empresaActual] = await Promise.all([
          this.userEmpresasService.getEmpresasAsignadas(userId),
          this.userEmpresasService.getEmpresaActual(userId),
        ]);

        // Enriquecer el objeto user
        (req.user as any).empresas_asignadas = empresasAsignadas;
        (req.user as any).empresa_actual = empresaActual;
        (req.user as any).empresa_id_actual = empresaActual?.id || (req.user as any).empresa_id;
      } catch (error) {
        console.error('Error en UserContextMiddleware:', error);
        // Continuar sin enriquecer el usuario si hay error
      }
    }

    next();
  }
}
