package ship

type DifficultyLevel int

const (
	DifficultyLevelMarine  DifficultyLevel = 0
	DifficultyLevelVeteran DifficultyLevel = 1
	DifficultyLevelHero    DifficultyLevel = 2
	DifficultyLevelMighty  DifficultyLevel = 3
)

// Ship encapsulates campaign state, including current location in the campaign,
// marines and their stats, supplies, etc.
type Ship struct {
	Difficulty   DifficultyLevel
	NextScenario string

	Squads      []*Squad
	Captain     *Character
	Chaplain    *Character
	Apothecary  *Character
	Techmarines [2]*Character
	Librarians  [4]*Character
}

type SquadType int
type CharacterType int

const (
	SquadTypeTactical   SquadType = 0
	SquadTypeTerminator SquadType = 1
	SquadTypeAssault    SquadType = 2
	SquadTypeDevastator SquadType = 3

	CharTypeMarine     CharacterType = 0
	CharTypeCaptain    CharacterType = 1
	CharTypeChaplain   CharacterType = 2
	CharTypeApothecary CharacterType = 3
	CharTypeTechmarine CharacterType = 4
	CharTypeLibrarian  CharacterType = 5
)

type Squad struct {
	Type SquadType

	Characters []*Character
}

type Character struct {
	Name string
	Type CharacterType

	Stats
	Honours
}

type Stats struct {
	ActionPoints   int
	Health         int
	Armour         int
	BallisticSkill int
	WeaponSkill    int
	Strength       int
	Toughness      int
	Initiative     int
	Attacks        int
	Leadership     int

	MissionCount int
	KillCount    int

	Experience int
}

type Honours struct {
	Marksman       bool
	CruxTerminatus bool
	PuritySeal     bool
	ImperialLaurel bool
}

func New() *Ship {
	s := &Ship{}
	s.Reset()

	return s
}

func (s *Ship) Reset() {
	*s = Ship{
		Difficulty: DifficultyLevelVeteran, // Default difficulty level
	}
}
