import { ValidationPipe } from "@nestjs/common";
import { NestFactory } from "@nestjs/core";
import { DocumentBuilder, SwaggerModule } from "@nestjs/swagger";
import { AppModule } from "./app.module";

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  app.setGlobalPrefix("api/v1");

  const corsOrigins = (
    process.env.CORS_ORIGINS ||
    "http://localhost:4000,http://127.0.0.1:4000,http://localhost:3000,http://127.0.0.1:3000,http://localhost:3001,http://127.0.0.1:3001"
  )
    .split(",")
    .map((origin) => origin.trim())
    .filter(Boolean);

  app.enableCors({
    origin: corsOrigins,
    credentials: true,
  });

  app.useGlobalPipes(
    new ValidationPipe({
      whitelist: true,
      forbidNonWhitelisted: true,
      transform: true,
      transformOptions: {
        enableImplicitConversion: true,
      },
    }),
  );

  const config = new DocumentBuilder()
    .setTitle("MBTaller")
    .setDescription(
      "API para gestion de ordenes de trabajo, clientes, vehiculos y cotizaciones",
    )
    .setVersion("1.0")
    .addBearerAuth()
    .addTag("auth", "Autenticacion")
    .addTag("clientes", "Gestion de clientes")
    .addTag("vehiculos", "Maestro de vehiculos")
    .addTag("ots", "Ordenes de trabajo")
    .addTag("cotizaciones", "Cotizaciones")
    .addTag("productos", "Productos/Servicios (maeplu)")
    .addTag("catalogos", "Catalogos internos")
    .addTag("uploads", "Subida de archivos")
    .addTag("sync", "Sincronizacion offline")
    .build();

  const document = SwaggerModule.createDocument(app, config);
  SwaggerModule.setup("api/docs", app, document);

  const port = process.env.PORT || 3001;
  await app.listen(port, "0.0.0.0");
  console.log(`Application running on: http://localhost:${port}/api/v1`);
  console.log(`Swagger docs: http://localhost:${port}/api/docs`);
}

bootstrap();
