import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ValidationPipe } from '@nestjs/common';
import { CustomExceptionFilter } from './exception/custom.exception.filter';
import helmet from 'helmet';
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
import runChildProcesses from './utils/child-process.util';
const express = require('express');

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.useGlobalPipes(new ValidationPipe());
  app.useGlobalFilters(new CustomExceptionFilter());
  app.enableCors({
    origin: [
      'http://localhost:3000',
      'http://localhost:3000/',
      'https://blackpearl.ibyteworkshop.com',
      'https://blackpearl.ibyteworkshop.com/',
      'https://blackpearlapp.com/',
      'https://blackpearlapp.com',
    ],
    methods: ['GET', 'POST', 'PATCH', 'DELETE'],
    credentials: true,
  });



  // app.use(helmet());

  
  app.use(
    helmet({
      crossOriginResourcePolicy: { policy: 'cross-origin' },
    }),
  );

  app.use(
    helmet.contentSecurityPolicy({
      directives: {
        defaultSrc: ["'self'"],
        imgSrc: [
          "'self'",
          'data:',
          'http://localhost:8888', // local API
          'http://localhost:3000',
          'http://localhost:3000/',
          'http://blackpearladmin.ibyteworkshop.com',
          'http://blackpearladmin.ibyteworkshop.com/',
          'https://blackpearlapp.com/',
          'https://blackpearlapp.com', // if you have another live domain
        ],
      },
    }),
  );

  app.use('/uploads', express.static('uploads'));

  const config = new DocumentBuilder()
    .setTitle('Black Pearl')
    .setDescription('The Black Pearl API description')
    .setVersion('1.0')
    .addTag('Black Pearl')
    .addBearerAuth(
      {
        type: 'http',
        scheme: 'bearer',
        bearerFormat: 'JWT',
        name: 'Authorization',
        in: 'header',
      },
      'access-token',
    )
    .build();
  const document = SwaggerModule.createDocument(app, config);
  SwaggerModule.setup('api', app, document);
  await app.listen(process.env.PORT);
}

runChildProcesses(bootstrap);
