package domain

type Building struct {
	MaxLevel        int
	MinLevel        int
	Wood            int
	Stone           int
	Iron            int
	Pop             int
	WoodFactor      float64
	StoneFactor     float64
	IronFactor      float64
	PopFactor       float64
	BuildTime       float64
	BuildTimeFactor float64
}

type BuildingInfo struct {
	main       Building
	barracks   Building
	stable     Building
	garage     Building
	watchtower Building
	snob       Building
	smith      Building
	place      Building
	statue     Building
	market     Building
	wood       Building
	stone      Building
	iron       Building
	farm       Building
	storage    Building
	hide       Building
	wall       Building
}

type NullBuildingInfo = NullValue[BuildingInfo]

func NewBuildingInfo(
	main Building,
	barracks Building,
	stable Building,
	garage Building,
	watchtower Building,
	snob Building,
	smith Building,
	place Building,
	statue Building,
	market Building,
	wood Building,
	stone Building,
	iron Building,
	farm Building,
	storage Building,
	hide Building,
	wall Building,
) (BuildingInfo, error) {
	return BuildingInfo{
		main:       main,
		barracks:   barracks,
		stable:     stable,
		garage:     garage,
		watchtower: watchtower,
		snob:       snob,
		smith:      smith,
		place:      place,
		statue:     statue,
		market:     market,
		wood:       wood,
		stone:      stone,
		iron:       iron,
		farm:       farm,
		storage:    storage,
		hide:       hide,
		wall:       wall,
	}, nil
}

func (b BuildingInfo) Main() Building {
	return b.main
}

func (b BuildingInfo) Barracks() Building {
	return b.barracks
}

func (b BuildingInfo) Stable() Building {
	return b.stable
}

func (b BuildingInfo) Garage() Building {
	return b.garage
}

func (b BuildingInfo) Watchtower() Building {
	return b.watchtower
}

func (b BuildingInfo) Snob() Building {
	return b.snob
}

func (b BuildingInfo) Smith() Building {
	return b.smith
}

func (b BuildingInfo) Place() Building {
	return b.place
}

func (b BuildingInfo) Statue() Building {
	return b.statue
}

func (b BuildingInfo) Market() Building {
	return b.market
}

func (b BuildingInfo) Wood() Building {
	return b.wood
}

func (b BuildingInfo) Stone() Building {
	return b.stone
}

func (b BuildingInfo) Iron() Building {
	return b.iron
}

func (b BuildingInfo) Farm() Building {
	return b.farm
}

func (b BuildingInfo) Storage() Building {
	return b.storage
}

func (b BuildingInfo) Hide() Building {
	return b.hide
}

func (b BuildingInfo) Wall() Building {
	return b.wall
}
