from typing import Any, List, Optional, Set

from sziszapangma.integration.repository.experiment_repository import ExperimentRepository


class MultipleExperimentRepository(ExperimentRepository):
    _repositories: List[ExperimentRepository]
    _index_to_read: int

    def __init__(self, repositories: List[ExperimentRepository], index_to_read: int):
        self._repositories = repositories
        self._index_to_read = index_to_read

    def initialise(self) -> None:
        for it in self._repositories:
            it.initialise()

    def get_read_repository(self) -> ExperimentRepository:
        return self._repositories[self._index_to_read]

    def property_exists(self, record_id: str, property_name: str) -> bool:
        return self.get_read_repository().property_exists(record_id, property_name)

    def update_property_for_key(self, record_id: str, property_name: str, property_value: Any):
        for it in self._repositories:
            it.update_property_for_key(record_id, property_name, property_value)

    def delete_property_for_key(self, record_id: str, property_name: str):
        for it in self._repositories:
            it.delete_property_for_key(record_id, property_name)

    def get_property_for_key(self, record_id: str, property_name: str) -> Optional[Any]:
        return self.get_read_repository().get_property_for_key(record_id, property_name)

    def get_all_record_ids(self) -> Set[str]:
        return self.get_read_repository().get_all_record_ids()

    def get_all_properties(self) -> Set[str]:
        return self.get_read_repository().get_all_properties()