Ctrl K
ComunidadGuías…

src/services/nativeDeviceStats.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
export interface NativeActiveDevicesSummary {
  android: number
  ios: number
  electron: number
  unknown: number
  total: number
}

export interface NativeDailyPlatformActive {
  labels: string[]
  android: number[]
  ios: number[]
  electron: number[]
  unknown: number[]
  total: number[]
}

const EMPTY_SUMMARY: NativeActiveDevicesSummary = {
  android: 0,
  ios: 0,
  electron: 0,
  unknown: 0,
  total: 0,
}

export function parseNativeSeriesPlatform(label: string): 'android' | 'ios' | 'electron' | 'unknown' {
  const normalized = label.trim().toLowerCase()
  if (normalized.startsWith('android'))
    return 'android'
  if (normalized.startsWith('ios'))
    return 'ios'
  if (normalized.startsWith('electron'))
    return 'electron'
  return 'unknown'
}

export function normalizeNativeActiveDevicesSummary(value: Partial<NativeActiveDevicesSummary> | null | undefined): NativeActiveDevicesSummary {
  if (!value)
    return { ...EMPTY_SUMMARY }

  const android = Math.max(0, Number(value.android) || 0)
  const ios = Math.max(0, Number(value.ios) || 0)
  const electron = Math.max(0, Number(value.electron) || 0)
  const unknown = Math.max(0, Number(value.unknown) || 0)
  const total = Math.max(0, Number(value.total) || 0)

  return {
    android,
    ios,
    electron,
    unknown,
    total: total > 0 ? total : android + ios + electron + unknown,
  }
}

export function calculateSummaryEvolutionPercent(current?: number, previous?: number): number | undefined {
  if (current === undefined || previous === undefined)
    return undefined

  const currentValue = Math.max(0, Number(current) || 0)
  const previousValue = Math.max(0, Number(previous) || 0)

  if (previousValue <= 0)
    return currentValue > 0 ? 100 : undefined

  return ((currentValue - previousValue) / previousValue) * 100
}

export function generateDemoNativeActiveSummary(days: number): NativeActiveDevicesSummary {
  const growth = Math.min(days, 30)
  const android = 420 + growth * 8
  const ios = 360 + growth * 6
  return {
    android,
    ios,
    electron: 12,
    unknown: 3,
    total: android + ios + 15,
  }
}

export function generateDemoPreviousNativeActiveSummary(days: number): NativeActiveDevicesSummary {
  const current = generateDemoNativeActiveSummary(days)
  return {
    android: Math.round(current.android * 0.92),
    ios: Math.round(current.ios * 0.9),
    electron: current.electron,
    unknown: current.unknown,
    total: Math.round(current.total * 0.91),
  }
}

export function generateDemoDailyPlatformActive(labels: string[]): NativeDailyPlatformActive {
  const android = labels.map((_label, index) => 120 + index * 4 + (index % 3))
  const ios = labels.map((_label, index) => 95 + index * 3 + (index % 2))
  const electron = labels.map(() => 4)
  const unknown = labels.map(() => 1)
  const total = labels.map((_label, index) => android[index] + ios[index] + electron[index] + unknown[index])

  return {
    labels,
    android,
    ios,
    electron,
    unknown,
    total,
  }
}