import { IsEmail, IsNotEmpty, IsString, IsOptional, IsNumber, IsArray, ArrayNotEmpty, IsBoolean, IsEnum } from "class-validator";
import { ApiProperty } from '@nestjs/swagger';
import { Types } from 'mongoose';
import { Transform } from "class-transformer";
import { subscription_plan_interval } from "../../model/schema/subscription.plan";

export class create_plan {
    @ApiProperty({ required: true })
    @IsString()
    name: string;

    @ApiProperty({ default: null })
    @IsOptional()
    @IsString()
    description: string;

    @ApiProperty({ required: true, enum: subscription_plan_interval, default: subscription_plan_interval.monthly })
    @IsString()
    period: any;

    @ApiProperty({ required: true })
    @IsNumber()
    amount: number;

    @ApiProperty({ required: true })
    @IsNumber()
    interval_count: number;

    @ApiProperty()
    @IsOptional()
    @IsArray()
    benefits: string[];

    @ApiProperty({ required: false })
    @IsOptional()
    @IsString()
    currency: string;

    @ApiProperty()
    @IsOptional()
    @IsNumber()
    chat_token_limit: number;
    
    @ApiProperty()
    @IsOptional()
    @IsNumber()
    call_limit: number;
    
    @ApiProperty()
    @IsOptional()
    @IsNumber()
    knowledgebase_limit: number;
    
    @ApiProperty()
    @IsOptional()
    @IsNumber()
    agent_limit: number;
    
    @ApiProperty()
    @IsOptional()
    @IsNumber()
    workspace_member_limit: number;
}

export class update_plan {

    @ApiProperty()
    @IsOptional()
    @IsArray()
    benefits: string[];

    @ApiProperty()
    @IsOptional()
    @IsNumber()
    chat_token_limit: number;
    
    @ApiProperty()
    @IsOptional()
    @IsNumber()
    call_limit: number;
    
    @ApiProperty()
    @IsOptional()
    @IsNumber()
    knowledgebase_limit: number;
    
    @ApiProperty()
    @IsOptional()
    @IsNumber()
    agent_limit: number;
    
    @ApiProperty()
    @IsOptional()
    @IsNumber()
    workspace_member_limit: number;

}

export class purchase_plan {

    @ApiProperty({ required: true })
    @IsString()
    subscription_plan_id: string;

    @ApiProperty({ required: true })
    @IsString()
    workspace_id: string;

    @ApiProperty()
    @IsOptional()
    @IsString()
    plan_id: string;

}
export class plan_list {

    @ApiProperty({ enum: subscription_plan_interval, default: subscription_plan_interval.monthly })
    @IsEnum(subscription_plan_interval)
    @IsString()
    interval: string;

}
