package itemprops

import "github.com/shopspring/decimal"

//MedicalSystem организм
// Humanoid
// Circuits
// Intake
//
//          Breathe: Vessel: Air intake >> mouth/nose -> trachea -> lungs
//                  Vessel: Blood >> heart -> lungs -> brain -> heart
//          Eat:
//                  Vessel: food >> mouth -> jaws
//                  Vessel: pulp >> esophagus -> stomach
//          Congestion:
//                  Vessel: Blood >> heart -> guts -> system -> liver -> heart
//                  Vessel: pulp >> stomach -> guts -> output
//                  Vessel: bile >>  liver -> stomach -> guts
//          Fast Congestion
//                  Vessel: liquid >> stomach -> guts -> kidney -> bladder -> pulp output
//                  Vessel: Blood >> heart -> guts -> system -> kidney -> heart
//          Blood сirculation:
//                  Vessel: blood >> heart -> system -> spleen -> heart
//                                         -> brain -> heart
//          Vision:
//                  Vessel: Nerve signal >> eye ->  brain
//          Smell:
//                  Vessel: Air intake >> nose
//                  Vessel: Nerve signal >> nose ->  brain
//          Hearing:
//                  Vessel: Air pressure >> ear
//                  Vessel: Nerve signal >> ear ->  brain
//          Touching:
//                  Vessel: Phys pressure/Temperature/Solvent >> skin -> nerve tissue ->  brain
//          Motion Sense:
//                  Vessel: Air pressure >> ear/nose -> inner ear -> brain [feeling fast-moving items]
//          Motion:
//                  Vessel: Gravity >> inner ear -> brain [equilibrium]
//                  Vessel: Nerve signal >> brain -> major nerve -> [...muscle -> tendon -> bone/joint] -> nerve tissue -> brain
//          Structural:
//                  Vessel: Nerve signal >> brain -> spinal brain -> [...muscle] -> nerve tissue -> brain
//          Psychic:
//                  Vessel: Nerve signal >> brain -> spinal brain -> brain
//          Consciousness:
//                  Vessel: Nerve signal >> brain -> brain
// Misc
//          Hand Grip ???:
//                  Vessel: Nerve signal >> palm -> fingers with off-thumb
//          Stance
// Body structure:
//     BasePart -> chest -> spine -> joint -> head
//                       -> spine -> lowerbody
//                       -> [left] joint -> shoulder -> joint -> arm -> joint -> palm -> 5 x finger
//                       -> [right] joint -> shoulder -> joint -> arm -> joint -> palm -> 5 x finger
//              -> lowerbody
//                       -> [left] joint -> leg -> joint -> hip -> joint -> foot -> 5 x finger
//                       -> [right] joint -> leg -> joint -> hip -> joint -> foot -> 5 x finger
//              -> head  -> joint -> jaw

// MedicalSystem Организм
type MedicalSystem struct {
	BasePart BodyPart
}

// MedicalCircuit Система обращения
type MedicalCircuit struct {
	Provides  MedicalAbility
	DependsOn Organ
	Vessel    MedicalVessel
	Contains  []Organ
}

// MedicalVessel кровь, желчь, пульпа, воздух, еда
type MedicalVessel struct {
	Name string
	Material
	Pressure decimal.Decimal //Pressure давление, kg / m3
}

// BodyPart часть тела
type BodyPart struct {
	LayerExtra  MedicalMaterial
	LayerOuter  MedicalMaterial
	LayerMiddle MedicalMaterial
	LayerInner  MedicalMaterial

	Size     DimensionItemSize
	Joints   []Joint
	Contains []InnerOrgan
	Exposes  []OuterOrgan
}

// Joint суставы, к чему и что крепится
type Joint struct {
	Name         string
	ConnectsFrom BodyPart
	ConnectsTo   BodyPart
}

type Organ struct {
	Name string
	Material
}

// InnerOrgan ливер, селезёнка, сердце, кишки итп
type InnerOrgan struct {
	Organ
	DependsOn MedicalCircuit
	BelongsTo MedicalCircuit
}

// OuterOrgan глаза, уши, волосы, когти итп
type OuterOrgan struct {
	Organ
	DependsOn MedicalCircuit
	BelongsTo MedicalCircuit
}

// слой части тела - кожа/чешуя/роговые пластины/хитиновый панцирь, жир, мускулы, кости
type MedicalMaterial struct {
	Name string
	Material
	MedicalSystemFlags
}

// @todo заменить на Medical Circuit
type MedicalSystemFlags struct {
	//Structural является ли опорным аппаратом
	Structural bool
	//Содежит ли кровь/ихор/
	MajorVeins   bool //вход на мотор, сломаешь - быстро выйдет из строя если будет двигаться
	MajorArteria bool //выход, то же самое + высокое давление

	Veins   bool //вход на мотор
	Arteria bool //выход из мотора, высокое давление

	MajorNerve  bool //повредишь - ниже по суставам не работает
	NerveTissue bool //повредишь - ниже по суставамс болит

	OxygenTube bool //трахея
	OxygenPump bool //лёгкое

	BloodPump bool //мотор

	ContainsCongestionLiquid bool

	IsMainCongestionPump bool
}

// MedicalAbility спсобность есть, стоять, не терять равновесие, дышать, выздоравливать, лечить свои органы, видеть итп
type MedicalAbility string
