import { HealthKitQuantitySample, HealthKitCategorySample, HealthKitWorkout } from '../entities/HealthKitSample';
import { HealthKitIdentifier, HealthKitUnit, DateRange } from '../value-objects/HealthKitIdentifier';

export interface HealthKitRepository {
  // Autorização
  requestAuthorization(): Promise<boolean>;
  requestSelectiveAuthorization(identifiers: HealthKitIdentifier[]): Promise<boolean>;
  getAuthorizationStatus(identifiers: HealthKitIdentifier[]): Promise<AuthorizationStatus[]>;
  
  // Consultas por período
  getQuantitySamples(
    identifier: HealthKitIdentifier,
    unit: HealthKitUnit,
    dateRange: DateRange
  ): Promise<HealthKitQuantitySample[]>;
  
  getCategorySamples(
    identifier: HealthKitIdentifier,
    dateRange: DateRange
  ): Promise<HealthKitCategorySample[]>;
  
  getWorkouts(dateRange: DateRange): Promise<HealthKitWorkout[]>;
  
  // Consultas por dias (conveniência)
  getQuantitySamplesForDays(
    identifier: HealthKitIdentifier,
    unit: HealthKitUnit,
    days: number
  ): Promise<HealthKitQuantitySample[]>;
  
  getCategorySamplesForDays(
    identifier: HealthKitIdentifier,
    days: number
  ): Promise<HealthKitCategorySample[]>;
  
  getWorkoutsForDays(days: number): Promise<HealthKitWorkout[]>;
  
  // Verificação de disponibilidade
  isAvailable(): boolean;
}

export interface AuthorizationStatus {
  readonly identifier: string;
  readonly status: 'notDetermined' | 'sharingDenied' | 'sharingAuthorized' | 'unknown';
}

export interface HealthKitTypeInfo {
  readonly identifier: string;
  readonly name: string;
  readonly description: string;
  readonly category: string;
  readonly type: string;
}

export interface HealthKitRepositoryConfig {
  readonly defaultDays?: number;
  readonly enableLogging?: boolean;
  readonly retryAttempts?: number;
} 