import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { IsEnum, IsOptional, IsString, IsUUID } from 'class-validator';
import { PermissionState } from 'common/enum/permission-state.enum';

export class EffectivePermissionDto {
  @ApiProperty({
    description: 'Unique identifier of the permission or sub-permission',
    example: '123e4567-e89b-12d3-a456-426614174000',
  })
  @IsUUID()
  id: string;

  @ApiProperty({
    description: 'Internal name of the permission or sub-permission',
    example: 'manage_users',
  })
  @IsString()
  name: string;

  @ApiProperty({
    description: 'Display name of the permission or sub-permission',
    example: 'Manage Users',
  })
  @IsString()
  displayName: string;

  @ApiProperty({
    description: 'Type of the entity',
    enum: ['permission', 'subPermission'],
    example: 'permission',
  })
  @IsEnum(['permission', 'subPermission'])
  type: 'permission' | 'subPermission';

  @ApiProperty({
    description: 'Effective permission state',
    enum: PermissionState,
    example: PermissionState.ALLOW,
  })
  @IsEnum(PermissionState)
  state: PermissionState;

  @ApiProperty({
    description: 'Source of the permission state',
    enum: ['user_override', 'role', 'default'],
    example: 'role',
  })
  @IsEnum(['user_override', 'role', 'default'])
  source: 'user_override' | 'role' | 'default';

  @ApiPropertyOptional({
    description: 'Additional information about the source (e.g., role name or "User Override")',
    example: 'Admin',
  })
  @IsString()
  @IsOptional()
  sourceDetails?: string;
}
