import { ApiProperty } from "@nestjs/swagger";
import { IsArray, IsEnum, IsOptional, IsString, MinLength, IsNotEmpty } from "class-validator";
import { BroadcastType, BroadcastTarget } from "../schema/broadcast.schema";

export class CreateBroadcastDto {
    @ApiProperty({ 
        description: 'Type of broadcast',
        enum: BroadcastType,
        example: BroadcastType.BOTH
    })
    @IsEnum(BroadcastType)
    type: BroadcastType;

    @ApiProperty({ 
        description: 'Target audience',
        enum: BroadcastTarget,
        example: BroadcastTarget.ONLY_USERS
    })
    @IsEnum(BroadcastTarget)
    target: BroadcastTarget;

    @ApiProperty({ description: 'Broadcast title' })
    @IsString()
    @IsNotEmpty()
    title: string;

    @ApiProperty({ description: 'Broadcast message content' })
    @IsString()
    @IsNotEmpty()
    @MinLength(10)
    message: string;

    @ApiProperty({ description: 'Email subject (required if type is EMAIL or BOTH)', required: false })
    @IsString()
    @IsOptional()
    email_subject: string;

    @ApiProperty({ 
        description: 'Array of user IDs (required if target is SPECIFIC_USERS)',
        type: [String],
        required: false 
    })
    @IsArray()
    @IsOptional()
    target_users: string[];
}

export class GetBroadcastListDto {
    @ApiProperty({ description: 'Page number', required: false, default: 1 })
    @IsOptional()
    page: number;

    @ApiProperty({ description: 'Items per page', required: false, default: 10 })
    @IsOptional()
    limit: number;

    @ApiProperty({ description: 'Filter by status', required: false, enum: ['PENDING', 'PROCESSING', 'COMPLETED', 'FAILED', 'PARTIALLY_FAILED'] })
    @IsOptional()
    @IsString()
    status: string;

    @ApiProperty({ description: 'Filter by type', required: false, enum: ['NOTIFICATION', 'EMAIL', 'BOTH'] })
    @IsOptional()
    @IsString()
    type: string;
}
