#ifndef INCLUDE_blame_h__
#define INCLUDE_blame_h__

#include "git2/blame.h"
#include "common.h"
#include "vector.h"
#include "diff.h"
#include "array.h"
#include "git2/oid.h"

/*
 * One blob in a commit that is being suspected
 */
typedef struct git_blame__origin {
	int refcnt;
	struct git_blame__origin *previous;
	git_commit *commit;
	git_blob *blob;
	char path[GIT_FLEX_ARRAY];
} git_blame__origin;

/*
 * Each group of lines is described by a git_blame__entry; it can be split
 * as we pass blame to the parents.  They form a linked list in the
 * scoreboard structure, sorted by the target line number.
 */
typedef struct git_blame__entry {
	struct git_blame__entry *prev;
	struct git_blame__entry *next;

	/* the first line of this group in the final image;
	 * internally all line numbers are 0 based.
	 */
	size_t lno;

	/* how many lines this group has */
	size_t num_lines;

	/* the commit that introduced this group into the final image */
	git_blame__origin *suspect;

	/* true if the suspect is truly guilty; false while we have not
	 * checked if the group came from one of its parents.
	 */
	bool guilty;

	/* true if the entry has been scanned for copies in the current parent
	 */
	bool scanned;

	/* the line number of the first line of this group in the
	 * suspect's file; internally all line numbers are 0 based.
	 */
	size_t s_lno;

	/* how significant this entry is -- cached to avoid
	 * scanning the lines over and over.
	 */
	unsigned score;

	/* Whether this entry has been tracked to a boundary commit.
	 */
	bool is_boundary;
} git_blame__entry;

struct git_blame {
	char *path;
	git_repository *repository;
	git_blame_options options;

	git_vector hunks;
	git_vector paths;

	git_blob *final_blob;
	git_array_t(size_t) line_index;

	size_t current_diff_line;
	git_blame_hunk *current_hunk;

	/* Scoreboard fields */
	git_commit *final;
	git_blame__entry *ent;
	int num_lines;
	const char *final_buf;
	git_off_t final_buf_size;
};

git_blame *git_blame__alloc(
	git_repository *repo,
	git_blame_options opts,
	const char *path);

#endif
