// in dto/api-response.dto.ts
import { Expose, Transform } from 'class-transformer';
import { ApiProperty } from '@nestjs/swagger';
import { ApiKeyTier } from '../entities/api-key.entity';

export class ApiKeyResponseDto {
  @Expose()
  @ApiProperty()
  id: string;

  @Expose()
  @ApiProperty()
  name: string;

  @Expose()
  @ApiProperty({ type: [String] })
  permissions: string[];

  @Expose()
  @ApiProperty()
  isActive: boolean;

  @Expose()
  @ApiProperty()
  tier: ApiKeyTier;

  @Expose()
  @ApiProperty()
  key?: string; // Only exposed when first created

  @Expose()
  @ApiProperty()
  createdAt: Date;

  @Expose()
  @ApiProperty()
  lastUsedAt: Date;

  @Expose()
  @ApiProperty()
  usageCount: number;

  @Expose()
  @ApiProperty()
  minuteLimit: number;

  @Expose()
  @ApiProperty()
  dailyLimit: number;

  @Expose()
  @ApiProperty()
  monthlyLimit: number;

  @Expose()
  @ApiProperty()
  minuteUsage: number;

  @Expose()
  @ApiProperty()
  dailyUsage: number;

  @Expose()
  @ApiProperty()
  monthlyUsage: number;

  @Expose()
  @ApiProperty()
  @Transform(({ value, obj }) => ({
    minute: obj.minuteLimit - obj.minuteUsage,
    daily: obj.dailyLimit - obj.dailyUsage,
    monthly: obj.monthlyLimit - obj.monthlyUsage,
  }))
  remaining: {
    minute: number;
    daily: number;
    monthly: number;
  };
}
