import { randomUUID } from 'crypto';
import { configDotenv } from 'dotenv';
import { join } from 'path';
import { Options } from 'pino-http';

configDotenv({
  path: join(process.cwd(), `apps/api/.env`),
});
export const pinoHttpOptions: Options = {
  base: undefined,
  genReqId: (req) => req.id || randomUUID(),
  redact: {
    paths: [
      'request.headers',
      'request.body',
      'error.config.headers',
      'error.config.data',
      'error.request',
      'error.response.data',
    ],
    censor: '[REDACTED]',
  },
  serializers: {
    req(req) {
      return {
        id: req.id,
        method: req.method,
        remoteAddress: req.remoteAddress,
        remotePort: req.remotePort,
      };
    },
    res(res) {
      delete res.headers;
      return res;
    },
    err(err) {
      return {
        type: err.type ?? err.name,
        code: err.code,
        status: err.status ?? err.statusCode,
      };
    },
  },
  customAttributeKeys: {
    req: 'request',
    err: 'error',
    res: 'response',
  },
  transport:
    process.env.NODE_ENV == 'local'
      ? {
          target: 'pino-pretty',
          options: {
            colorize: true,
            ignore: 'context',
          },
        }
      : undefined,
  quietReqLogger: true,
};
