module PlansHelper

	# @param {@objectModel} Usuario
	# @param {@Symbol} :min, :max
	def total_vm(user, _type=:min)
		_vme = 	vm_sex(_type, user.sex) +
				vm_age(_type, user.years) +
				vm_height(_type, user) +
				vm_weight(_type, user) +
				vm_regimen(_type, user.medical_history.training_time) +
				vm_force(_type, user.medical_history.force) + 
				vm_work(_type, user.medical_history.training_days) +
				vm_recover(_type, user.medical_history.recover) +
				vm_external_recover(_type, user.medical_history.external_recover) +
				vm_novelty(_type, user.medical_history.novelty_program) +
				vm_physical_stress(_type, user.medical_history.physical_stress) +
				vm_stress(_type, user.medical_history.stress) +
				vm_rest(_type, user.medical_history.sleep_hours) +
				vm_steroids(_type, user.medical_history.steroids)
		return _vme
	end

	def vm_sex(type, sex)
		case type
		when :min
			return sex == "female" ? 1.5 : 0
		when :max
			return sex == "female" ? 3 : 0
		end
	end

	def vm_age(type, years)
		if years >= 50
			return type == :min ? 1 : -3
		elsif years >= 40
			return type == :min ? 0.5 : -1
		elsif years >= 30
			return 0
		elsif years >= 20
			return type == :min ? -0.5 : 1
		else
			return type == :min ? -1 : 2
		end
	end

	def vm_height(type, user)
		medium = user.sex == "female" ? 160 : 170
		tall = user.sex == "female" ? 167 : 183
		very_tall = user.sex == "female" ? 175 : 195
		# 
		height = (user.height.to_i || 0)
		if height >= very_tall
			return type == :min ? -1 : -2
		elsif height >= tall
			return type == :min ? -0.5 : -1
		elsif height >= medium
			return type == :min ? 0.5 : 1
		else
			return type == :min ? 1 : 2
		end
	end

	def vm_weight(type, user)
		normal = user.sex == "female" ? 58 : 75
		heavy = user.sex == "female" ? 75 : 100
		over_weight = user.sex == "female" ? 90 : 125
		# 
		weight = (user.weight.to_i || 0)
		if weight >= over_weight
			return type == :min ? -1.5 : -3
		elsif weight >= heavy
			return type == :min ? -0.5 : -1
		elsif weight >= normal
			return type == :min ? 0.5 : 1
		else
			return type == :min ? 1.5 : 3
		end
	end

	# **/ checar ese campo
	def vm_regimen(type, years)
		# De 0 a 4 años => 0
		# De 4 a 8 años => 1
		# De 8 a 12 años => 2
		# Más de 12 años => 3
		case years
		when 3
			return type == :min ? 1 : -2
		when 2
			return type == :min ? 0.5 : 0
		when 1
			return type == :min ? -0.5 : 2
		else
			return type == :min ? -1 : 0
		end
	end

	def vm_force(type, force)
		case force
		when 3
			return type == :min ? 1 : -3
		when 2
			return type == :min ? 0.5 : -1
		when 1
			return type == :min ? 0 : 0
		else
			return type == :min ? -0.5 : 1
		end
	end

	def vm_work(type, work)
		case work
		when 4
			return type == :min ? 1 : 2
		when 3
			return type == :min ? -0.5 : 1
		when 2
			return type == :min ? 0 : 0
		when 1
			return type == :min ? -0.5 : -1
		else
			return type == :min ? -1 : -2
		end
	end

	def vm_recover(type, recover)
		case recover
		when 4
			return type == :min ? -1 : -2
		when 3
			return type == :min ? -0.5 : -1
		when 2
			return type == :min ? 0 : 0
		when 1
			return type == :min ? 0.5 : 1
		else
			return type == :min ? 1 : 2
		end
	end

	def vm_external_recover(type, recover)
		if recover == true
			return type == :min ? -1 : 2
		else
			return type == :min ? 0 : 0
		end
	end

	def vm_novelty(type, novelty)
		case novelty
		when 3
			return type == :min ? -0.5 : -3
		when 2
			return type == :min ? 0 : -1
		when 1
			return type == :min ? 0.5 : 1
		else
			return type == :min ? 1.5 : 3
		end
	end

	def vm_stress(type, stress)
		case stress
		when 2
			return type == :min ? 0.5 : -2
		when 1
			return type == :min ? 0 : 0
		else
			return type == :min ? -0.5 : 1
		end
	end

	def vm_physical_stress(type, stress)
		case stress
		when 3
			return type == :min ? 1.5 : -3
		when 2
			return type == :min ? 1 : -2
		when 1
			return type == :min ? -0.5 : 1
		else
			return type == :min ? 0 : 0
		end
	end

	def vm_rest(type, sleep_hours)
		case sleep_hours
		when 2
			return type == :min ? -0.5 : 1
		when 1
			return type == :min ? 0 : 0
		else
			return type == :min ? 0.5 : -2
		end
	end

	def vm_feeding(type, feeding)
		case feeding
		when "DCA"
			return type == :min ? 1.5 : -3
		when "DCM"
			return type == :min ? 1 : -2
		when "DCB"
			return type == :min ? 0.5 : -1
		when "ISO"
			return type == :min ? 0 : 0
		when "SCB"
			return type == :min ? -0.5 : 1
		when "SCM"
			return type == :min ? -1 : 2
		when "SCA"
			return type == :min ? -1.5 : 3
		end
	end

	def vm_steroids(type, steroids)
		if steroids == true
			return type == :min ? -1.5 : 3
		else
			return type == :min ? 0 : 0
		end
	end

	def tiempo_entrenando(index=0)
		ages = ["0 a 4","4 a 8","8 a 12","Más de 12"]
		ages[index||0]
	end

	def objective(_objective)
		return "" if _objective.blank?
		idx = ["lose_weight", "mass_increase", "mass_increase_ped", "competition", "ped_competition", "maintenance", "performance"].index(_objective)
		return idx ? ["Pérdida de grasa", "Crecimiento", "Bulking Ped", "Competencia", "Competencia Ped", "Mantenimiento","Rendimiento"][idx] : ""
	end

	def objetivos
		[["Pérdida de grasa", "lose_weight"], ["Crecimiento", "mass_increase"], ["Bulking Ped", "mass_increase_ped"], ["Competencia", "competition"], ["Competencia Ped", "ped_competition"], ["Mantenimiento", "maintenance"], ["Rendimiento", "performance"]]
	end

	def diff_attr(plans, _current_plan, _attr)
		_plans = plans.order(finish: :asc)
		_index = _plans.index(_current_plan)
		_prev_plan = _plans[_index + 1]
		if _prev_plan
			_current_attr = _current_plan.send(_attr.to_s)
			_prev_attr = _prev_plan.send(_attr.to_s)
			result = clean_float(_current_attr.to_f - _prev_attr.to_f).to_f
			return "#{'+' if result>0.0}#{result}"
		end
		return 0
	end

end