import { ExceptionFilter, Catch, ArgumentsHost, Logger, HttpException } from '@nestjs/common';
import { toJsonResponse } from '../response';
import { ErrorLogService } from '../services/error-logs/error-log.service';


@Catch()
export class AllExceptionsFilter implements ExceptionFilter {
  constructor(private readonly errorLogService: ErrorLogService) { }
  catch(exception: any, host: ArgumentsHost) {
    const ctx = host.switchToHttp();
    const response = ctx.getResponse();
    const request = ctx.getRequest();
    const status = exception instanceof HttpException ? exception.getStatus() : 500;
    console.log(exception.message);

    // IF SERVER ERROR THEN SEND HARDCORDED ERROR MESSAGE
    if (status == 500 || status == 502 || status == 503 || status == 504) {

      const module = request.route?.path || 'Unknown';
      const context = {
        method: request.method,
        path: request.url,
        body: request.body,
        query: request.query,
        params: request.params,
      };
      console.error('Global Exception Filter:', {
        module,
        exception,
        context,
      });
      this.errorLogService.logError(module, exception.name, exception.message, context);

      response.status(status).json(toJsonResponse(status, 'Something went to wrong, Please try again'));
    }

    // SEND EXCEPTION MESSAGE
    response.status(status).json(toJsonResponse(status, exception.message));

  }
}
