import { ApiProperty } from "@nestjs/swagger";
import { IsArray, IsEnum, IsNotEmpty, IsNumber, IsOptional, IsString, ValidateNested } from "class-validator";
import { Type } from "class-transformer";

class FileDto {
	@ApiProperty({ example: 'file-id-123', required: true })
	@IsString()
	id: string;

	@ApiProperty({ example: 'document.pdf', required: true })
	@IsString()
	name: string;

	@ApiProperty({ example: 'application/pdf', required: false })
	@IsString()
	@IsOptional()
	mimeType?: string;

	@ApiProperty({ example: 1024, required: false })
	@IsNumber()
	@IsOptional()
	size?: number;

	@ApiProperty({ example: 'https://cdn.binaplus.co.il/file-id-123', required: false })
	@IsString()
	@IsOptional()
	url?: string;
}

export class CreateGeneralFeedbackDto {

	// subject is not required
	@ApiProperty({ example: 'Subject Bla bla', required: false, description: 'Subject' })
	@IsString({ message: 'Subject must be a string' })
	@IsOptional()
	subject: string;

	@ApiProperty({ example: 'Feedback Bla bla', required: true, description: 'Feedback' })
	@IsString({ message: 'Feedback must be a string' })
	feedback: string;

	@ApiProperty({ type: [FileDto], required: false, description: 'Files attached to feedback' })
	@IsArray()
	@IsOptional()
	@ValidateNested({ each: true })
	@Type(() => FileDto)
	files?: FileDto[];
}

export class ChangeGeneralFeedbackStatusDto {
    @ApiProperty({ example: 'Resolved', required: true, enum: ['Open', 'Resolved'] })
    @IsNotEmpty()
    @IsEnum(['Open', 'Resolved'])
    status: string;
}

export class AddMessageDto {
    @ApiProperty({ example: 'This is a message from the user', required: true, description: 'Message Content' })
    @IsString({ message: 'Content must be a string' })
		@IsOptional()
    content: string;

    @ApiProperty({ type: [FileDto], required: false, description: 'Files attached to message' })
    @IsArray()
    @IsOptional()
    @ValidateNested({ each: true })
    @Type(() => FileDto)
    files?: FileDto[];
}