import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { TicketCategory, TicketPriority } from '@prisma/client';
import { IsEnum, IsOptional, IsString, IsUUID, MaxLength } from 'class-validator';

export class CreateTicketDto {
  @ApiProperty() @IsUUID() complexId!: string;

  @ApiPropertyOptional() @IsOptional() @IsUUID() lotId?: string;

  @ApiProperty({ enum: TicketCategory }) @IsEnum(TicketCategory)
  category!: TicketCategory;

  @ApiPropertyOptional({ enum: TicketPriority }) @IsOptional() @IsEnum(TicketPriority)
  priority?: TicketPriority;

  @ApiProperty() @IsString() @MaxLength(160) title!: string;
  @ApiProperty() @IsString() @MaxLength(4000) description!: string;
  @ApiPropertyOptional() @IsOptional() @IsString() location?: string;
}

export class AddTicketMessageDto {
  @ApiProperty() @IsString() @MaxLength(4000) body!: string;
  @ApiPropertyOptional() @IsOptional() isInternal?: boolean;
}

export class AssignTicketDto {
  @ApiProperty() @IsUUID() assigneeId!: string;
}

export class UpdateTicketStatusDto {
  @ApiProperty() @IsString() status!:
    | 'NEW' | 'ACKNOWLEDGED' | 'IN_PROGRESS' | 'AWAITING_PARTS' | 'RESOLVED' | 'CLOSED' | 'REJECTED';
}
