package com.atlassian.bitbucket.mesh.git.builder.commit;

import com.atlassian.bitbucket.mesh.git.builder.GitProcess;
import com.atlassian.bitbucket.mesh.git.builder.GitProcessBuilderSupport;

import javax.annotation.Nonnull;
import java.io.File;

public interface GitCommitBuilder extends GitProcessBuilderSupport<GitCommitBuilder> {

    /**
     * @param value {@code true} to include all
     * @return the git commit builder
     */
    @Nonnull
    GitCommitBuilder all(boolean value);

    @Nonnull
    GitProcess<Void> build();

    /**
     * @return the git commit builder
     */
    @Nonnull
    GitCommitBuilder clearPaths();

    @Nonnull
    GitCommitBuilder message(@Nonnull File value);

    @Nonnull
    GitCommitBuilder message(@Nonnull String value);

    /**
     * @param value the path
     * @return the git commit builder
     */
    @Nonnull
    GitCommitBuilder path(String value);

    /**
     * @param value the path value
     * @param values additional path values
     * @return the git commit builder
     */
    @Nonnull
    GitCommitBuilder paths(String value, String... values);

    /**
     * @param values path values
     * @return the git commit builder
     */
    @Nonnull
    GitCommitBuilder paths(Iterable<String> values);

    /**
     * @param value {@code true} to make the output quieter
     * @return the git commit builder
     */
    @Nonnull
    GitCommitBuilder quiet(boolean value);

    /**
     * Controls whether {@code git commit} will try to run hooks like {@code commit-msg} and {@code pre-commit}.
     *
     * @param value the verification mode to use
     * @return {@code this}
     */
    @Nonnull
    GitCommitBuilder verify(@Nonnull GitCommitVerify value);
}
