package org.jenkinsci.plugins.gitchangelog;

import static hudson.tasks.BuildStepMonitor.NONE;
import static org.jenkinsci.plugins.gitchangelog.perform.GitChangelogPerformer.performerPerform;

import hudson.Extension;
import hudson.FilePath;
import hudson.Launcher;
import hudson.model.Run;
import hudson.model.TaskListener;
import hudson.tasks.BuildStepDescriptor;
import hudson.tasks.BuildStepMonitor;
import hudson.tasks.Publisher;
import hudson.tasks.Recorder;
import java.io.IOException;
import jenkins.tasks.SimpleBuildStep;
import org.jenkinsci.plugins.gitchangelog.config.GitChangelogConfig;
import org.kohsuke.stapler.DataBoundConstructor;

public class GitChangelogRecorder extends Recorder implements SimpleBuildStep {
  @Extension
  public static final BuildStepDescriptor<Publisher> DESCRIPTOR = new GitChangelogDescriptor();

  private GitChangelogConfig config;

  public GitChangelogRecorder() {}

  @DataBoundConstructor
  public GitChangelogRecorder(GitChangelogConfig config) {
    this.config = config;
  }

  public GitChangelogConfig getConfig() {
    return this.config;
  }

  @Override
  public BuildStepDescriptor<Publisher> getDescriptor() {
    return DESCRIPTOR;
  }

  @Override
  public BuildStepMonitor getRequiredMonitorService() {
    return NONE;
  }

  @Override
  public void perform(Run<?, ?> build, FilePath workspace, Launcher launcher, TaskListener listener)
      throws InterruptedException, IOException {
    performerPerform(this.config, build, listener, workspace);
  }

  public void setConfig(GitChangelogConfig config) {
    this.config = config;
  }
}