package d2records

import "github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"

// AutoMagic has all of the AutoMagicRecords, used for generating magic properties for spawned items
type AutoMagic []*AutoMagicRecord

// AutoMagicRecord describes rules for automatically generating magic properties when spawning
// items
type AutoMagicRecord struct {
	// IncludeItemCodes
	// itype 1 to itype7
	// "Include Type" fields. You need to place item codes in any of these columns to allow that item
	// to receive mods from this row. See the note below.
	IncludeItemCodes [7]string

	// ModCode
	// They're the Property codes from Properties.txt.
	// These determine the actual properties which make up this autoprefix.
	// Each autoprefix can include up to three modifiers.
	ModCode [3]string

	// ExcludeItemCodes
	// etype 1 to etype3
	// 'Exclude type' . This field prevents certain mods from spawning on specific item codes.
	ExcludeItemCodes [3]string

	// ModParam, min, max
	// Parameter, min, and max values for the property
	ModParam [3]int
	ModMin   [3]int
	ModMax   [3]int

	// Name
	// String Comment Blizzard lists the equivalent prefix/affix here.
	// You can use what ever you wish here though. Handy for keeping track of groups.
	Name string

	// Version
	// it needs to be set to 0 if the prefix\affix you want to create or edit is going to be a
	// classic-only item ( with "classic" we mean "non-expansion" mode,
	// which you can toggle on and off when creating a character) or set to 100 if it's going to be
	// available in Expansion. This field is important,
	// as Items with " version" set to 100 will NOT be generated in Classic Diablo II.
	Version int

	// MinSpawnLevel
	// this field accepts numeric values and specifies the minimum level from which this autoprefix
	// can spawn. The column in question can be combined with the following maxlevel: to effectively
	// control groups of automods,
	// because you can use this field to combine multiple rows so that the autoprefixes are assigned
	// based on the level of the treasure drop [see below].
	MinSpawnLevel int

	// MaxSpawnLevel
	// this field accepts numeric values and specifies the maximum level beyond which the automod
	// stop spawning.
	MaxSpawnLevel int

	// LevelRequirement
	// It is the level requirement for this autoprefix.
	// This value is added to the Level Requirement of the item generated with this mod.
	LevelRequirement int

	// Class
	// the class type
	Class d2enum.Hero

	// ClassLevelRequirement
	// If class is set, this should allow a separate level requirement for this class.
	// This is a polite thing to do,
	// as other classes gain no advantage from class specific modifiers.
	// I am uncertain that this actually works.
	ClassLevelRequirement int

	// Frequency
	// For autoprefix groups, it states the chance to spawn this specific group member vs others.
	// Higher numbers means the automod will be more common. The 1.
	// 09 version file guide has some formuae relateing to this.
	Frequency int

	// Group
	// This field accepts numeric values and groups all the lines with the same values,
	// which are treated as a group. Only one autoprefix per group can be chosen,
	// and groups are influenced by levelreq, classlevelreq and frequency The 1.
	// 09 version file guide has a very nice tutorial about how to set up groups.
	// NOTE: The group number must also be entered in the 'auto prefix' column of each entry in
	// Weapons.txt or Armor.txt in order for the property to appear.
	Group int

	// PaletteTransform
	// If transform is set to 1 then the item will be colored with the chosen color code,
	// taken from Colors.txt
	PaletteTransform int

	// CostDivide
	// Numeric value that acts as divisor for the item price.
	CostDivide int

	// CostMultiply
	// Numeric value that acts as multiplier for the item price.
	CostMultiply int

	// CostAdd
	// Numeric value that acts as a flat sum added to the item price.
	CostAdd int

	// Spawnable
	// It is a boolean type field, and states if this autoprefix can actually spawn in the game.
	// You can disable this row by setting it to 0 , or enable it by setting it to 1
	Spawnable bool

	// SpawnOnRare
	// It decides whether this autoprefix spawns on rare quality items or not.
	// You can prevent that from happening by setting it to 0 , or you can allow it by setting it to 1
	SpawnOnRare bool

	// transform
	// It is a boolean value whichallows the colorization of the items.
	Transform bool
}