/*
 * Copyright (C) the libgit2 contributors. All rights reserved.
 *
 * This file is part of libgit2, distributed under the GNU GPL v2 with
 * a Linking Exception. For full terms see the included COPYING file.
 */
#ifndef INCLUDE_patch_generate_h__
#define INCLUDE_patch_generate_h__

#include "common.h"
#include "diff.h"
#include "diff_file.h"
#include "patch.h"

enum {
	GIT_PATCH_GENERATED_ALLOCATED = (1 << 0),
	GIT_PATCH_GENERATED_INITIALIZED = (1 << 1),
	GIT_PATCH_GENERATED_LOADED = (1 << 2),
	/* the two sides are different */
	GIT_PATCH_GENERATED_DIFFABLE = (1 << 3),
	/* the difference between the two sides has been computed */
	GIT_PATCH_GENERATED_DIFFED = (1 << 4),
	GIT_PATCH_GENERATED_FLATTENED = (1 << 5),
};

struct git_patch_generated {
	struct git_patch base;

	git_diff *diff; /* for refcount purposes, maybe NULL for blob diffs */
	size_t delta_index;
	git_diff_file_content ofile;
	git_diff_file_content nfile;
	uint32_t flags;
	git_pool flattened;
};

typedef struct git_patch_generated git_patch_generated;

extern git_diff_driver *git_patch_generated_driver(git_patch_generated *);

extern void git_patch_generated_old_data(
	char **, size_t *, git_patch_generated *);
extern void git_patch_generated_new_data(
	char **, size_t *, git_patch_generated *);
extern int git_patch_generated_from_diff(
	git_patch **, git_diff *, size_t);

typedef struct git_patch_generated_output git_patch_generated_output;

struct git_patch_generated_output {
	/* these callbacks are issued with the diff data */
	git_diff_file_cb file_cb;
	git_diff_binary_cb binary_cb;
	git_diff_hunk_cb hunk_cb;
	git_diff_line_cb data_cb;
	void *payload;

	/* this records the actual error in cases where it may be obscured */
	int error;

	/* this callback is used to do the diff and drive the other callbacks.
	 * see diff_xdiff.h for how to use this in practice for now.
	 */
	int (*diff_cb)(git_patch_generated_output *output,
		git_patch_generated *patch);
};

#endif
