from selfprivacy_api.migrations.migration import Migration

from selfprivacy_api.repositories.tokens.json_tokens_repository import (
    JsonTokensRepository,
)
from selfprivacy_api.repositories.tokens.redis_tokens_repository import (
    RedisTokensRepository,
)
from selfprivacy_api.repositories.tokens.abstract_tokens_repository import (
    AbstractTokensRepository,
)


class LoadTokensToRedis(Migration):
    """Load Json tokens into Redis"""

    def get_migration_name(self):
        return "load_tokens_to_redis"

    def get_migration_description(self):
        return "Loads access tokens and recovery keys from legacy json file into redis token storage"

    def is_repo_empty(self, repo: AbstractTokensRepository) -> bool:
        if repo.get_tokens() != []:
            return False
        if repo.get_recovery_key() is not None:
            return False
        return True

    def is_migration_needed(self):
        try:
            if not self.is_repo_empty(JsonTokensRepository()) and self.is_repo_empty(
                RedisTokensRepository()
            ):
                return True
        except Exception as e:
            print(e)
            return False

    def migrate(self):
        # Write info about providers to userdata.json
        try:
            RedisTokensRepository().clone(JsonTokensRepository())

            print("Done")
        except Exception as e:
            print(e)
            print("Error migrating access tokens from json to redis")