import { applyDecorators } from '@nestjs/common';
import {
  ApiBadRequestResponse,
  ApiConflictResponse,
  ApiForbiddenResponse,
  ApiNotFoundResponse,
  ApiUnauthorizedResponse,
} from '@nestjs/swagger';

type JwtErrorOptions = {
  badRequest?: string;
  conflict?: string;
  forbidden?: string;
  notFound?: string;
  unauthorized?: string;
};

export function ApiJwtErrorResponses(options: JwtErrorOptions = {}) {
  const decorators = [
    ApiBadRequestResponse({
      description: options.badRequest ?? 'Validation failed or request payload is invalid',
    }),
    ApiUnauthorizedResponse({
      description: options.unauthorized ?? 'Missing, expired, or invalid bearer token',
    }),
    ApiForbiddenResponse({
      description: options.forbidden ?? 'Authenticated user does not have the required permission',
    }),
  ];

  if (options.notFound) {
    decorators.push(
      ApiNotFoundResponse({
        description: options.notFound,
      }),
    );
  }

  if (options.conflict) {
    decorators.push(
      ApiConflictResponse({
        description: options.conflict,
      }),
    );
  }

  return applyDecorators(...decorators);
}

export function ApiCronErrorResponses() {
  return applyDecorators(
    ApiUnauthorizedResponse({
      description: 'Missing or invalid x-cron-secret header',
    }),
  );
}
