from recommendations.Costs import Costs
from recommendations.recommendation_utils import override_costs
from backend.Property import Property


class SecondaryHeating:
    """
    This class recommends the removal of the secondary heating system for properties that have a primary heating
    system.
    """

    # The list of existing heating systems that are accepted
    ACCEPTED_MAINHEAT_DESCRIPTIONS = ["Boiler and radiators, mains gas"]
    ACCEPTED_SECONDHEAT_DESCRIPTIONS = ["Room heaters, electric"]
    # These are the heaters where works are required to remove them
    FIXED_HEATER_DESCRIPTIONS = ["Room heaters, electric"]

    def __init__(self, property_instance: Property):
        self.property = property_instance
        self.costs = Costs(self.property)

        self.recommendation = []

    def recommend(self, phase: int):
        # Reset
        self.recommendation = []

        if self.property.main_heating["clean_description"] not in self.ACCEPTED_MAINHEAT_DESCRIPTIONS:
            return

        # TODO: We need to clean secondary data
        if self.property.data['secondheat-description'] not in self.ACCEPTED_SECONDHEAT_DESCRIPTIONS:
            return

        if self.property.data['secondheat-description'] in self.FIXED_HEATER_DESCRIPTIONS:
            # We have an associated cost otherwise, there is no cost
            n_rooms = self.property.data['number-heated-rooms']
        else:
            n_rooms = 0

        costs = self.costs.heater_removal(n_rooms=n_rooms)

        already_installed = "secondary_heating" in self.property.already_installed
        if already_installed:
            costs = override_costs(costs)
            description = "Secondary heating system has already been removed, no further action required"
        else:
            description = "Remove the secondary heating system"

        self.recommendation.append(
            {
                "phase": phase,
                "parts": [],
                "type": "secondary_heating",
                "description": description,
                "starting_u_value": None,
                "new_u_value": None,
                "sap_points": None,
                "already_installed": already_installed,
                **costs,
                "simulation_config": {
                    "secondheat_description_ending": "None"
                }
            }
        )
