import { IsOptional, IsInt, Min, IsString, IsEnum } from 'class-validator';
import { Type } from 'class-transformer';
import { SortDirection } from 'common/enums/user.enum';
import { ApiProperty } from '@nestjs/swagger';

export class PaginationQueryDto {
  @IsOptional()
  @Type(() => Number)
  @IsInt()
  @Min(1)
  @ApiProperty({ example: 1, description: 'Current page number', default: 1 })
  page?: number = 1;

  @IsOptional()
  @Type(() => Number)
  @IsInt()
  @Min(1)
  @ApiProperty({ example: 10, description: 'Records per page', default: 10 })
  limit?: number = 10;

  @IsOptional()
  @IsString()
  @ApiProperty({
    example: 'createdAt',
    description: 'Property to sort by',
    default: 'createdAt',
  })
  sortBy?: string;

  @IsOptional()
  @IsEnum(SortDirection)
  @ApiProperty({
    enum: SortDirection,
    example: SortDirection.DESC,
    description: 'Direction of sorting',
    default: SortDirection.DESC,
  })
  sortDirection?: SortDirection = SortDirection.DESC;

  @IsOptional()
  @IsString()
  @ApiProperty({
    description: 'Global search keyword',
    required: false,
  })
  search?: string;

  @IsOptional()
  @IsEnum(['CHECKIN', 'CHECKOUT', 'ABSENT'], {
    message: 'attendanceStatus must be CHECKIN, CHECKOUT, or ABSENT',
  })
  @ApiProperty({
    enum: ['CHECKIN', 'CHECKOUT', 'ABSENT'],
    description: 'Filter users by attendance status (optional)',
    required: false,
  })
  attendanceStatus?: 'CHECKIN' | 'CHECKOUT' | 'ABSENT';
}
