# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.

from typing import TYPE_CHECKING

from UM.Application import Application
from UM.ConfigurationErrorMessage import ConfigurationErrorMessage

from .QualityGroup import QualityGroup

if TYPE_CHECKING:
    from cura.Machines.QualityNode import QualityNode


class QualityChangesGroup(QualityGroup):
    def __init__(self, name: str, quality_type: str, parent = None) -> None:
        super().__init__(name, quality_type, parent)
        self._container_registry = Application.getInstance().getContainerRegistry()

    def addNode(self, node: "QualityNode") -> None:
        extruder_position = node.getMetaDataEntry("position")

        if extruder_position is None and self.node_for_global is not None or extruder_position in self.nodes_for_extruders: #We would be overwriting another node.
            ConfigurationErrorMessage.getInstance().addFaultyContainers(node.getMetaDataEntry("id"))
            return

        if extruder_position is None:  # Then we're a global quality changes profile.
            self.node_for_global = node
        else:  # This is an extruder's quality changes profile.
            self.nodes_for_extruders[extruder_position] = node

    def __str__(self) -> str:
        return "%s[<%s>, available = %s]" % (self.__class__.__name__, self.name, self.is_available)
