import { Catch, ExceptionFilter, ArgumentsHost, HttpException, HttpStatus } from '@nestjs/common';
import { WithSentry } from '@sentry/nestjs'
import * as Sentry from "@sentry/node"
@Catch()
export class ErrorHandler implements ExceptionFilter {
    @WithSentry()
    catch(exception: HttpException, host: ArgumentsHost) {
        console.log('error=====>>>>>>',exception);
        
        const ctx = host.switchToHttp();
        const response = ctx.getResponse();
       
        let status = exception.getStatus ? exception.getStatus(): HttpStatus.INTERNAL_SERVER_ERROR;
        let message: any = exception.message || "Internal Server Error";
        
        if (exception instanceof HttpException) {
            status = exception.getStatus();
            const error_message: any =  exception.getResponse();
            // message = exception.getResponse()['message'] || exception.message;
            
            message = exception.message;
            
            if (Array.isArray(message)) {
                message= message[0]
            }

            function isObject(value) {
                return value instanceof Object && !(value instanceof Array);
            }

            if (isObject(error_message)) {
                // message = error_message.message[0];
                message = Array.isArray(error_message.message) ? error_message.message[0] : error_message.message;
            }
        }

        Sentry.captureException(message)
        response.status(status).json({
            statusCode: status,
            message: message,
        });
    }


}

