import { ApiPropertyOptional } from '@nestjs/swagger';
import { Transform, Type } from 'class-transformer';
import { IsEnum, IsInt, IsOptional, Max, Min } from 'class-validator';

import { MeetingStatus } from '@/generated/prisma/client';

import { normalizeMeetingStatus } from '../meeting-status';

export class ListMeetingsDto {
  @ApiPropertyOptional({
    example: 1,
    default: 1,
    description: 'Page number.',
  })
  @IsOptional()
  @Type(() => Number)
  @IsInt()
  @Min(1)
  page?: number;

  @ApiPropertyOptional({
    example: 10,
    default: 10,
    description: 'Items per page. Max 100.',
  })
  @IsOptional()
  @Type(() => Number)
  @IsInt()
  @Min(1)
  @Max(100)
  limit?: number;

  @ApiPropertyOptional({
    example: 1,
    description: 'Filter meetings by owner user ID.',
  })
  @IsOptional()
  @Type(() => Number)
  @IsInt()
  @Min(1)
  userId?: number;

  @ApiPropertyOptional({
    example: 1,
    description: 'Filter meetings by linked meeting request ID.',
  })
  @IsOptional()
  @Type(() => Number)
  @IsInt()
  @Min(1)
  meetingRequestId?: number;

  @ApiPropertyOptional({
    example: MeetingStatus.DRAFT,
    enum: MeetingStatus,
    description: 'Filter meetings by status.',
  })
  @IsOptional()
  @Transform(({ value }) => normalizeMeetingStatus(value))
  @IsEnum(MeetingStatus)
  status?: MeetingStatus;
}
