import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { IsBoolean, IsEnum, IsNotEmpty, IsOptional, IsString, Length } from 'class-validator';
import { UserRole } from 'common/enum/UserRole.enum';
import { SubPermissionEntity } from '../entities/sub-permission.entity';

export class CreatePermissionDto {
  @ApiProperty({ example: 'CREATE_USER', description: 'Unique permission name' })
  @IsString()
  @IsNotEmpty()
  name: string;

  @ApiProperty({ example: 'Create User', description: 'Display name for UI' })
  @IsString()
  @IsNotEmpty()
  @Length(1, 150)
  displayName: string;

  @ApiPropertyOptional({ example: 'Allows the user to create other users', description: 'Optional description' })
  @IsOptional()
  @IsString()
  description?: string;

  @ApiProperty({ enum: UserRole, example: UserRole.USER, description: 'Permission applies to which type of user role' })
  @IsEnum(UserRole)
  permissionType: UserRole;

  @ApiPropertyOptional({ example: true })
  @IsOptional()
  @IsBoolean()
  isActive?: boolean = true;

  @ApiPropertyOptional({ example: false })
  @IsOptional()
  @IsBoolean()
  isSystemPermission?: boolean = false;

  @ApiPropertyOptional({ example: false })
  @IsOptional()
  @IsBoolean()
  isClientPermission?: boolean = false;

  // optionsal for subpermission
  @ApiPropertyOptional({ type: [SubPermissionEntity], description: 'List of sub-permissions associated with this permission' })
  @IsOptional()
  subPermissions?: SubPermissionEntity[];
}
