// Defaults for the roster transforms.  These started life as module constants
// in the Python scripts this was ported from; the values are the same, but the app
// passes them in so they can be edited without touching the transform code.

export const defaultConfig = {
	// --- mergeDuplicateUnits -------------------------------------------------

	// Two force-level selections are the same unit when all of these attributes
	// agree.  ``entryId`` identifies the catalogue entry plus the option path
	// that produced it, so it is the real key; ``name`` and ``type`` are there
	// so a unit the user renamed by hand stays a unit of its own.
	unitMatchAttrs: ["entryId", "name", "type"],

	// Selections carrying one of these categories are roster bookkeeping
	// (battle size, detachment, ...), not datasheets.  Leave them alone.
	skipCategories: ["Configuration"],

	// --- removeLeaderAbilities ----------------------------------------------

	// Abilities to strip, matched against the ``name`` attribute (exactly,
	// case-sensitively).  Both the Abilities profile and the same-named rule go.
	abilitiesToStrip: ["Leader", "Support"],

	// --- convertChoiceAbilities ---------------------------------------------

	// Abilities to split into per-option profiles, matched against the
	// profile's ``name`` attribute.
	abilitiesToConvert: ["Canticles of the Omnissiah", "Battle Protocols", "Icon of War"],
};

// Which transforms run by default when a roster is loaded.
export const defaultToggles = {
	mergeDuplicateUnits: true,
	removeLeaderAbilities: true,
	convertChoiceAbilities: true,
};

// typeName BattleScribe files datasheet abilities under.  Only profiles of
// this type are matched, so a *weapon* that happened to be called "Support"
// stays, and a rule that happens to share an ability's name is still removed
// deliberately (the strip wants both halves).
export const ABILITY_TYPE_NAME = "Abilities";

// Name of the characteristic holding the rules text.
export const DESCRIPTION_CHARACTERISTIC = "Description";

// Child elements of a <selection> that get merged, in the order BattleScribe
// writes them.  The order only matters when a container is missing from the
// unit we keep and has to be created.
export const CONTAINER_ORDER = [
	"rules",
	"profiles",
	"selections",
	"costs",
	"categories",
];

// Containers that are removed once a strip empties them.  A container that was
// *already* empty is left as it was.
export const PRUNABLE_CONTAINERS = ["profiles", "rules"];
