﻿import 'reflect-metadata';
import { BadRequestException, ValidationPipe } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { ConfigService } from '@nestjs/config';
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
import express from 'express';
import helmet from 'helmet';
import path from 'path';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule.register(), { cors: true });
  const configService = app.get(ConfigService);
  app.use(helmet());
  app.setGlobalPrefix('api');
  const uploadRoot = configService.get<string>('UPLOAD_DIR') ?? path.join(process.cwd(), 'storage', 'uploads');
  app.use('/uploads', express.static(uploadRoot));
  app.useGlobalPipes(new ValidationPipe({
    whitelist: true,
    transform: true,
    forbidNonWhitelisted: true,
    exceptionFactory: (errors) => {
      const details = errors.flatMap((error) => Object.values(error.constraints ?? {}));
      return new BadRequestException(details.length ? details : 'Dados invalidos na requisicao.');
    },
  }));
  const config = new DocumentBuilder().setTitle('Chegô API').setDescription('API escalável de delivery').setVersion('1.0.0').addBearerAuth().build();
  SwaggerModule.setup('api/docs', app, SwaggerModule.createDocument(app, config));
  await app.listen(configService.get<number>('API_PORT') ?? 3001);
}
bootstrap();
