import { HealthKitRepository } from '../../domain/repositories/HealthKitRepository';
import { HealthKitRepositoryImpl } from '../../data/repositories/HealthKitRepositoryImpl';
import { NativeHealthKitDataSource } from '../../data/datasources/NativeHealthKitDataSource';
import { HealthKitRepositoryConfig } from '../../domain/repositories/HealthKitRepository';

export class HealthKitContainer {
  private static instance: HealthKitContainer;
  private repository: HealthKitRepository | null = null;

  private constructor() {}

  static getInstance(): HealthKitContainer {
    if (!HealthKitContainer.instance) {
      HealthKitContainer.instance = new HealthKitContainer();
    }
    return HealthKitContainer.instance;
  }

  getRepository(config?: HealthKitRepositoryConfig): HealthKitRepository {
    if (!this.repository) {
      const dataSource = new NativeHealthKitDataSource();
      this.repository = new HealthKitRepositoryImpl(dataSource, config);
    }
    return this.repository;
  }

  // Método para reset (útil para testes)
  reset(): void {
    this.repository = null;
  }
}

// Factory function para facilitar o uso
export function createHealthKitRepository(config?: HealthKitRepositoryConfig): HealthKitRepository {
  return HealthKitContainer.getInstance().getRepository(config);
} 