package com.googlesource.gerrit.plugins.its.base.workflow;

import com.google.gerrit.extensions.api.GerritApi;
import com.google.gerrit.extensions.common.ProjectInfo;
import com.google.gerrit.extensions.events.GitReferenceUpdatedListener;
import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.reviewdb.client.RefNames;
import com.google.inject.Inject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ItsRulesProjectCacheRefresher implements GitReferenceUpdatedListener {
  private static final Logger log = LoggerFactory.getLogger(ItsRulesProjectCacheRefresher.class);

  private final GerritApi gApi;
  private final ItsRulesProjectCache itsRuleProjectCache;

  @Inject
  ItsRulesProjectCacheRefresher(GerritApi gApi, ItsRulesProjectCache itsRuleProjectCache) {
    this.gApi = gApi;
    this.itsRuleProjectCache = itsRuleProjectCache;
  }

  @Override
  public void onGitReferenceUpdated(Event event) {
    if (!event.getRefName().equals(RefNames.REFS_CONFIG)) {
      return;
    }
    String projectName = event.getProjectName();
    itsRuleProjectCache.evict(projectName);
    try {
      for (ProjectInfo childProject : gApi.projects().name(projectName).children()) {
        itsRuleProjectCache.evict(childProject.name);
      }
    } catch (RestApiException e) {
      log.warn("Unable to evict ITS rules cache", e);
    }
  }
}
