from components.actor import HeaterFactory
from components.sensor import TempSensorFactory
from components.plant.pot import Pot
from components.plant.pot_real import PotReal


class PlantFactory:
	"""Builds the heater/pot/sensor trio together, as one consistent rig,
	rather than each picked independently via its own *_name config key -
	sim and real hardware are never actually mixed and matched in
	practice, so Controller.plant_name alone now decides all three (see
	server/brewpi.py).

	Delegates the actual construction to HeaterFactory/TempSensorFactory
	rather than importing HeaterHendi/TempSensor_max31865 directly, so
	those classes' hardware-only deps (spidev, pyserial) stay lazily
	imported - only actually needed when plant_name picks the real rig."""

	@staticmethod
	def create(plant_name, dt, heater_config):
		if "sim" in plant_name:
			heater = HeaterFactory.create("sim", heater_config)
			pot = Pot(dt)
			sensor = TempSensorFactory.create("sim", temp_offset=-0.15, variance=0.01)
			return heater, pot, sensor

		heater = HeaterFactory.create("Hendi", heater_config)
		pot = PotReal()
		sensor = TempSensorFactory.create("max31865", temp_offset=-0.15)
		return heater, pot, sensor
