#ifndef ADVICE_H
#define ADVICE_H

struct string_list;

/*
 * To add a new advice, you need to:
 * Define a new advice_type.
 * Add a new entry to advice_setting array.
 * Add the new config variable to Documentation/config/advice.adoc.
 * Call advise_if_enabled to print your advice.
 */
enum advice_type {
	ADVICE_ADD_EMBEDDED_REPO,
	ADVICE_ADD_EMPTY_PATHSPEC,
	ADVICE_ADD_IGNORED_FILE,
	ADVICE_AMBIGUOUS_FETCH_REFSPEC,
	ADVICE_AM_WORK_DIR,
	ADVICE_CHECKOUT_AMBIGUOUS_REMOTE_BRANCH_NAME,
	ADVICE_COMMIT_BEFORE_MERGE,
	ADVICE_DEFAULT_BRANCH_NAME,
	ADVICE_DETACHED_HEAD,
	ADVICE_DIVERGING,
	ADVICE_FETCH_SET_HEAD_WARN,
	ADVICE_FETCH_SHOW_FORCED_UPDATES,
	ADVICE_FORCE_DELETE_BRANCH,
	ADVICE_GRAFT_FILE_DEPRECATED,
	ADVICE_IGNORED_HOOK,
	ADVICE_IMPLICIT_IDENTITY,
	ADVICE_MERGE_CONFLICT,
	ADVICE_NESTED_TAG,
	ADVICE_OBJECT_NAME_WARNING,
	ADVICE_PUSH_ALREADY_EXISTS,
	ADVICE_PUSH_FETCH_FIRST,
	ADVICE_PUSH_NEEDS_FORCE,
	ADVICE_PUSH_NON_FF_CURRENT,
	ADVICE_PUSH_NON_FF_MATCHING,
	ADVICE_PUSH_REF_NEEDS_UPDATE,
	ADVICE_PUSH_UNQUALIFIED_REF_NAME,
	ADVICE_PUSH_UPDATE_REJECTED,
	ADVICE_PUSH_UPDATE_REJECTED_ALIAS,
	ADVICE_REBASE_TODO_ERROR,
	ADVICE_REF_SYNTAX,
	ADVICE_RESET_NO_REFRESH_WARNING,
	ADVICE_RESOLVE_CONFLICT,
	ADVICE_RM_HINTS,
	ADVICE_SEQUENCER_IN_USE,
	ADVICE_SET_UPSTREAM_FAILURE,
	ADVICE_SKIPPED_CHERRY_PICKS,
	ADVICE_SPARSE_INDEX_EXPANDED,
	ADVICE_STATUS_AHEAD_BEHIND_WARNING,
	ADVICE_STATUS_HINTS,
	ADVICE_STATUS_U_OPTION,
	ADVICE_SUBMODULES_NOT_UPDATED,
	ADVICE_SUBMODULE_ALTERNATE_ERROR_STRATEGY_DIE,
	ADVICE_SUBMODULE_MERGE_CONFLICT,
	ADVICE_SUGGEST_DETACHING_HEAD,
	ADVICE_UPDATE_SPARSE_PATH,
	ADVICE_WAITING_FOR_EDITOR,
	ADVICE_WORKTREE_ADD_ORPHAN,
};

int git_default_advice_config(const char *var, const char *value);
__attribute__((format (printf, 1, 2)))
void advise(const char *advice, ...);

/**
 * Checks if advice type is enabled (can be printed to the user).
 * Should be called before advise().
 */
int advice_enabled(enum advice_type type);

/**
 * Checks the visibility of the advice before printing.
 */
__attribute__((format (printf, 2, 3)))
void advise_if_enabled(enum advice_type type, const char *advice, ...);

int error_resolve_conflict(const char *me);
void NORETURN die_resolve_conflict(const char *me);
void NORETURN die_conclude_merge(void);
void NORETURN die_ff_impossible(void);
void advise_on_updating_sparse_paths(struct string_list *pathspec_list);
void detach_advice(const char *new_name);
void advise_on_moving_dirty_path(struct string_list *pathspec_list);

#endif /* ADVICE_H */
