package com.atlassian.bitbucket.scm.git.command;

import com.atlassian.bitbucket.commit.CommitCallback;
import com.atlassian.bitbucket.compare.CompareRequest;
import com.atlassian.bitbucket.content.ChangeCallback;
import com.atlassian.bitbucket.content.DiffContentCallback;
import com.atlassian.bitbucket.scm.Command;
import com.atlassian.bitbucket.scm.compare.CompareChangeCommandParameters;
import com.atlassian.bitbucket.scm.compare.CompareDiffCommandParameters;
import com.atlassian.bitbucket.scm.compare.PluginCompareCommandFactory;

import javax.annotation.Nonnull;

/**
 * Overrides methods from the standard {@link PluginCompareCommandFactory} interface
 * to returns {@link GitCommand} instances instead of simple {@link Command Command} instances.
 *
 * @see GitCommandFactory
 * @see GitPullRequestCommandFactory
 */
public interface GitCompareCommandFactory extends PluginCompareCommandFactory {

    @Nonnull
    @Override
    GitCommand<Void> changes(@Nonnull CompareRequest compareRequest,
                             @Nonnull CompareChangeCommandParameters parameters,
                             @Nonnull ChangeCallback callback);

    @Nonnull
    @Override
    GitCommand<Void> commits(@Nonnull CompareRequest compareRequest,
                             @Nonnull CommitCallback callback);

    @Nonnull
    @Override
    GitCommand<Void> diff(@Nonnull CompareRequest compareRequest,
                          @Nonnull CompareDiffCommandParameters parameters,
                          @Nonnull DiffContentCallback callback);
}
