type DominionText = string;

type DominionColor = {
	color: string;
	priority: number; // highest priority is "primary", second highest is "secondary".
	overridesAction: boolean;
};

type DominionBasicCardType = {
	typeType: "basic";
	name: "Action" | "Treasure" | "Victory" | "Reaction" | "Duration" | "Reserve" | "Night" | "Attack" | "Command";
	color: null | DominionColor;
};
type DominionBasicLandscapeType = {
	typeType: "basic";
	name: "Event" | "Landmark" | "Project" | "Way" | "Trait";
	color: null | DominionColor;
};

type DominionCardType = DominionBasicCardType | DominionCustomCardType;
type DominionLandscapeType = DominionBasicLandscapeType | DominionCustomLandscapeType;

type DominionCard = {
	orientation: "card";
	title: string;
	description: DominionText;
	type: Array<DominionCardType>;
	image: string;
	artist: string;
	author: string;
	version: string;
	price: DominionText;
	preview: DominionText;
} | {
	orientation: "landscape";
	title: string;
	description: DominionText;
	type: Array<DominionLandscapeType>;
	image: string;
	artist: string;
	author: string;
	version: string;
	price: DominionText;
};

type DominionCustomSymbol = {
	image: string;
};

type DominionCustomCardType = {
	typeType: "custom";
	name: string;
	color: DominionColor
};
type DominionCustomLandscapeType = {
	typeType: "custom";
	name: string;
	color: DominionColor
};

type DominionExpansion = {
	cards: Array<DominionCard>;
	icon: string;
	customSymbols: Array<DominionCustomSymbol>;
	customCardTypes: Array<DominionCustomCardType>;
	customLandscapeTypes: Array<DominionCustomLandscapeType>;
}
