Editor/git/models/ConflictEntry.cs
#nullable enable
namespace Sandbox.git.models;

/// <summary>
/// Base for unmerged (conflicted) entries.
/// </summary>
public abstract class UnmergedEntry {
	public const string EntryKind = "conflicted";
	public SubmoduleStatus? SubmoduleStatus { get; init; }
}

/// <summary>
/// Text conflict with detectable markers (BothAdded or BothModified).
/// </summary>
public class TextConflictEntry : UnmergedEntry {
	public UnmergedEntrySummary Action { get; }
	public GitStatusEntry Us { get; }
	public GitStatusEntry Them { get; }

	public TextConflictEntry(UnmergedEntrySummary action, GitStatusEntry us, GitStatusEntry them,
		SubmoduleStatus? submoduleStatus = null) {
		Action = action;
		Us = us;
		Them = them;
		SubmoduleStatus = submoduleStatus;
	}
}

/// <summary>
/// Manual conflict: user must choose us or them.
/// </summary>
public class ManualConflictEntry : UnmergedEntry {
	public UnmergedEntrySummary Action { get; }
	public GitStatusEntry Us { get; }
	public GitStatusEntry Them { get; }

	public ManualConflictEntry(UnmergedEntrySummary action, GitStatusEntry us, GitStatusEntry them,
		SubmoduleStatus? submoduleStatus = null) {
		Action = action;
		Us = us;
		Them = them;
		SubmoduleStatus = submoduleStatus;
	}
}