import { i18n } from '@services/libs/i18n';
import { GitStep } from 'git-sync-js';

export function getErrorMessageI18NDict() {
  return {
    AssumeSyncError: i18n.t('Log.SynchronizationFailed'),
    SyncParameterMissingError: i18n.t('Log.GitTokenMissing'), // + error.parameterName,
    GitPullPushError: i18n.t('Log.SyncFailedSystemError'),
    CantSyncGitNotInitializedError: i18n.t('Log.CantSyncGitNotInitialized'),
    SyncScriptIsInDeadLoopError: i18n.t('Log.CantSynchronizeAndSyncScriptIsInDeadLoop'),
    CantSyncInSpecialGitStateAutoFixFailed: i18n.t('Log.CantSyncInSpecialGitStateAutoFixFailed'),
    CantForcePullError: i18n.t('Log.CantForcePullError'),
  };
}

export function translateMessage(message: GitStep | string): string {
  // Narrow to GitStep for exhaustive known cases, fallback to original string
  switch (message as GitStep) {
    case GitStep.StartGitInitialization: {
      return i18n.t('Log.StartGitInitialization');
    }
    case GitStep.GitRepositoryConfigurationFinished: {
      return i18n.t('Log.GitRepositoryConfigurationFinished');
    }
    case GitStep.StartConfiguringGithubRemoteRepository: {
      return i18n.t('Log.StartConfiguringGithubRemoteRepository');
    }
    case GitStep.StartBackupToGitRemote: {
      return i18n.t('Log.StartBackupToGithubRemote');
    }
    case GitStep.PrepareCloneOnlineWiki: {
      return i18n.t('Log.PrepareCloneOnlineWiki');
    }
    case GitStep.PrepareSync: {
      return i18n.t('Log.PrepareSync');
    }
    case GitStep.HaveThingsToCommit: {
      return i18n.t('Log.HaveThingsToCommit');
    }
    case GitStep.AddingFiles: {
      return i18n.t('Log.AddingFiles');
    }
    case GitStep.AddComplete: {
      return i18n.t('Log.AddComplete');
    }
    case GitStep.CommitComplete: {
      return i18n.t('Log.CommitComplete');
    }
    case GitStep.PreparingUserInfo: {
      return i18n.t('Log.PreparingUserInfo');
    }
    case GitStep.FetchingData: {
      return i18n.t('Log.FetchingData');
    }
    case GitStep.NoNeedToSync: {
      return i18n.t('Log.NoNeedToSync');
    }
    case GitStep.LocalAheadStartUpload: {
      return i18n.t('Log.LocalAheadStartUpload');
    }
    case GitStep.CheckingLocalSyncState: {
      return i18n.t('Log.CheckingLocalSyncState');
    }
    case GitStep.CheckingLocalGitRepoSanity: {
      return i18n.t('Log.CheckingLocalGitRepoSanity');
    }
    case GitStep.LocalStateBehindSync: {
      return i18n.t('Log.LocalStateBehindSync');
    }
    case GitStep.LocalStateDivergeRebase: {
      return i18n.t('Log.LocalStateDivergeRebase');
    }
    case GitStep.RebaseResultChecking: {
      return i18n.t('Log.CheckingRebaseStatus');
    }
    case GitStep.RebaseConflictNeedsResolve: {
      return i18n.t('Log.RebaseConflictNeedsResolve');
    }
    case GitStep.RebaseSucceed: {
      return i18n.t('Log.RebaseSucceed');
    }
    case GitStep.GitPushFailed: {
      return i18n.t('Log.GitPushFailed');
    }
    case GitStep.GitMergeFailed: {
      return i18n.t('Log.GitMergeFailed');
    }
    case GitStep.SyncFailedAlgorithmWrong: {
      return i18n.t('Log.SyncFailedSystemError');
    }
    case GitStep.PerformLastCheckBeforeSynchronizationFinish: {
      return i18n.t('Log.PerformLastCheckBeforeSynchronizationFinish');
    }
    case GitStep.SynchronizationFinish: {
      return i18n.t('Log.SynchronizationFinish');
    }
    case GitStep.StartFetchingFromGithubRemote: {
      return i18n.t('Log.StartFetchingFromGithubRemote');
    }
    case GitStep.CantSyncInSpecialGitStateAutoFixSucceed: {
      return i18n.t('Log.CantSyncInSpecialGitStateAutoFixSucceed');
    }
    case GitStep.StartForcePull: {
      return i18n.t('Log.StartForcePull');
    }
    case GitStep.SkipForcePull: {
      return i18n.t('Log.SkipForcePull');
    }
    case GitStep.StartResettingLocalToRemote: {
      return i18n.t('Log.StartResettingLocalToRemote');
    }
    case GitStep.FinishForcePull: {
      return i18n.t('Log.FinishForcePull');
    }
    default: {
      return message;
    }
  }
}
