import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';

export class FeatureUsageCountResponse {
  @ApiProperty({ description: 'Feature name' })
  featureName: string;

  @ApiProperty({ description: 'Usage count' })
  count: number;

  @ApiProperty({ description: 'Unique users count' })
  uniqueUsers: number;

  @ApiProperty({ description: 'Firsrt used' })
  firstUsed: Date;

  @ApiProperty({ description: 'Last used' })
  lastUsed: Date;
}

export class FeatureUsageOverTimeResponse {
  @ApiProperty({ description: 'Feature name' })
  featureName: string;

  @ApiProperty({ description: 'Date of usage', type: String })
  date: string;

  @ApiProperty({ description: 'Usage count' })
  count: number;
}

export class GeoDistributionResponse {
  @ApiProperty({ description: 'Feature name' })
  featureName: string;

  @ApiProperty({ description: 'Country code' })
  country: string;

  @ApiPropertyOptional({ description: 'Region code' })
  region?: string;

  @ApiPropertyOptional({ description: 'City name' })
  city?: string;

  @ApiProperty({ description: 'Usage count' })
  count: number;
}

export class UserAgentDistributionResponse {
  @ApiProperty({ description: 'User agent string' })
  userAgent: string;

  @ApiProperty({ description: 'Usage count' })
  count: number;
}

export class UsageByTimeOfDayResponse {
  @ApiProperty({ description: 'Hour of day (0-23)' })
  hour: number;

  @ApiProperty({ description: 'Usage count' })
  count: number;
}

export class FeatureMetricsResponse {
  @ApiProperty({ description: 'Feature name' })
  featureName: string;

  @ApiProperty({ description: 'Total usage count' })
  totalUsage: number;

  @ApiProperty({ description: 'Unique users count' })
  uniqueUsers: number;
}

export class MetadataAnalysisResponse {
  @ApiProperty({ description: 'Metadata value' })
  value: any;

  @ApiProperty({ description: 'Count' })
  count: number;
}

export class HomeAnalyticsRespone {
  @ApiProperty({ description: 'Feature name' })
  totalFeatures: string[];

  @ApiProperty({ description: 'Geo details', type: Object })
  geoDetails: Record<string, any>;

  @ApiProperty({ description: 'Metadata', type: Object })
  metadata: Record<string, any>;

  @ApiProperty({ description: 'unique user count' })
  uniqueUserCount: number;

  @ApiProperty({ description: 'total usage count' })
  totalUsageCount: number;

  @ApiProperty({ description: 'Average Daily Usage', type: Number })
  averageDailyUsage: number;

  @ApiProperty({ description: 'Peak Usage', type: Number })
  peakUsage: number;

  @ApiProperty({ description: 'Usage over time' })
  usageOverTime: FeatureUsageOverTimeResponse[];

  @ApiProperty({ description: 'Geo distribution' })
  geoDistribution: GeoDistributionResponse[];

  @ApiProperty({ description: 'User agent distribution' })
  userAgentDistribution: UserAgentDistributionResponse[];

  @ApiProperty({ description: 'Total unique country' })
  totalUniqueCountry: number;

  @ApiProperty({ description: 'Total unique city' })
  totalUniqueCity: number;

  @ApiProperty({ description: 'Total unique region' })
  totalUniqueRegion: number;

  @ApiProperty({ description: 'Total unique timezone' })
  totalUniqueTimezone: number;

  @ApiProperty({ description: 'Total unique user agent' })
  totalUniqueUserAgent: number;

  @ApiProperty({ description: 'Timezones with highest usage', type: [String] })
  topTimezones: string[];

  @ApiProperty({ description: 'City with the most users' })
  mostActiveCity: string;

  @ApiProperty({ description: 'Country with the most usage' })
  mostActiveCountry: string;
}
