import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { IsEnum, IsNotEmpty, IsOptional, IsString, Length } from 'class-validator';
import { RoleType } from '../entities/role.entity';
import { PermissionStateDto } from './permission-state.dto';

export class CreateRoleDto {
  @ApiProperty({ example: 'Manager', description: 'Role name (*)' })
  @IsString()
  @IsNotEmpty()
  @Length(1, 150)
  name: string;

  @ApiProperty({ enum: RoleType, example: RoleType.ADMIN_ROLE, description: 'Role type (*)' })
  @IsEnum(RoleType)
  roleType: RoleType = RoleType.CLIENT_ROLE;

  @ApiProperty({ example: true, description: 'Is this a custom role? (*)' })
  @IsOptional()
  isCustom?: boolean = false;

  @ApiPropertyOptional({ example: 1, description: 'Client ID (Numllable if roletype = admin) ' })
  @IsOptional()
  @IsString()
  clientId?: string;

  @ApiProperty({ type: [PermissionStateDto], description: 'List of permission ' })
  permissions?: PermissionStateDto[];

  @ApiProperty({ type: [PermissionStateDto], description: 'List of sub-permission' })
  subPermissions?: PermissionStateDto[];
}
