import { ApiProperty } from '@nestjs/swagger';
import { IsEnum, IsMongoId, IsNotEmpty, IsOptional, IsString } from 'class-validator';
import { CallingStatus, CallMode, CallType } from '../schema/calling.schema';

export class RequestDto {
    user_data: any;
}
export enum AgoraRole {
    PUBLISHER = 'PUBLISHER',
    SUBSCRIBER = 'SUBSCRIBER',
}

export class MakeCallDto {
    @ApiProperty({ example: 'my-channel', description: 'Name of the Agora channel', required: true })
    @IsString()
    @IsNotEmpty()
    channelName: string;

    @ApiProperty({ enum: AgoraRole, example: AgoraRole.PUBLISHER, description: 'Role in the meeting', required: false })
    @IsOptional()
    @IsEnum(AgoraRole)
    role: AgoraRole;

    @ApiProperty({ enum: CallMode, example: CallMode.AUDIO, description: 'Call mode', required: true })
    @IsString()
    @IsEnum(CallMode)
    call_mode: string;

    @ApiProperty({ enum: CallType, example: CallType.ONE_TO_ONE, description: 'Call type', required: true })
    @IsString()
    @IsEnum(CallType)
    call_type: string

    @ApiProperty({ description: 'Call to user ID', required: false })
    @IsString()
    @IsMongoId()
    @IsOptional()
    call_to?: string;

    @ApiProperty({ description: 'Call to connection ID OR group ID', required: true })
    @IsString()
    @IsNotEmpty()
    @IsMongoId()
    connection_id: string; //or group_id

}


export class AcceptRejectDto {
    status: string;
    call_id: string;
}

export class UpdateCallStatusApiDto {
    @ApiProperty({ enum: CallingStatus, example: CallingStatus.ACCEPT, description: 'Call status', required: true })
    @IsString()
    @IsEnum(CallingStatus)
    status: string;

    @ApiProperty({ description: 'Call ID', required: true })
    @IsString()
    @IsNotEmpty()
    @IsMongoId()
    call_id: string;

    @ApiProperty({ description: 'User ID', required: false })
    @IsMongoId()
    @IsOptional()
    user_id?: string;
}

export class JoinCallConnectionDto {
    call_id: string;
}