import { Injectable, Logger, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';
import * as geoip from 'geoip-lite';

@Injectable()
export class AnalyticsMiddleware implements NestMiddleware {
  private readonly logger = new Logger(AnalyticsMiddleware.name);
  use(req: Request, res: Response, next: NextFunction) {
    const userIp = req.ip || req.socket.remoteAddress || 'Unknown IP';
    const userAgent = req.headers['user-agent'] || 'Unknown Agent';
    const featureName = req.path.replace('/', '');

    const geo = geoip.lookup(userIp);
    const geoDetails = geo;

    // Attach metadata to request
    req['analyticsData'] = {
      featureName,
      userIp,
      userAgent,
      geoDetails,
      metadata: {
        method: req.method,
        params: req.params,
        query: req.query,
        body: req.body,
        headers: {
          host: req.headers.host,
          cookies: req.headers.cookie || 'No cookies',
        },
        // cookies: req.cookies,
        // referer: req.headers.referer,
        // originalUrl: req.originalUrl,
      },
    };

    next();
  }
}
