import { StorageAdapter, StorageAdapterParams } from "../adapter";
import { Model } from "../../model";
import { EphemeralRepository } from "./repository";
import { Repository } from "../repository";

const _repositories: Record<string, EphemeralRepository> = {
};

export class EphemeralAdapter implements StorageAdapter {
  static register(key: string, repository: EphemeralRepository): void {
    _repositories[key] = repository;
  }

  constructor(params: StorageAdapterParams) {}

  resolve<T>(name: string, model: Model<T>): Promise<Repository<T>> {
    let repository = _repositories[name];
    if (repository && repository.model.name === model.name) {
      return Promise.resolve(<EphemeralRepository<T>>repository);
    }
    return Promise.resolve(new EphemeralRepository<T>(model));
  }
}
