import typing

from abaqusConstants import *


class SurfaceCrushTriggerAssignment:
    """The SurfaceCrushTriggerAssignment object stores the surface crush trigger assignment
    definition for surfaces in ContactExp objects. The SurfaceCrushTriggerAssignment object
    has no constructor or members.

    Notes
    -----
    This object can be accessed by:

    .. code-block:: python

        import interaction
        mdb.models[name].interactions[name].surfaceCrushTriggerAssignments

    The corresponding analysis keywords are:

    - SURFACE PROPERTY ASSIGNMENT

    """

    def changeValuesInStep(
        self, stepName: str, index: int, value: typing.Union[SymbolicConstant, float]
    ):
        """This method allows modification of surface crush trigger assignments already defined on
        surfaces in a given step.

        Parameters
        ----------
        stepName
            A String specifying the name of the step in which the surface crush trigger assignments
            are to be modified.
        index
            An Int specifying the position of the surface crush trigger assignment whose value is to
            be modified.
        value
            A tuple specifying the value of the surface crush trigger assignments for the surface
            whose index is referenced. Each tuple contains three entries:
            - A SymbolicConstant specifying the trigger option to be used for the surface. Possible
            values of the SymbolicConstant are TRIGGER, NO_TRIGGER, or NO_CRUSH.
            - A Float specifying the crush stress value to be used for the surface.
            - A Float specifying the crush initiation angle value to be used for the surface.
            - A Float specifying the crush continuation angle value to be used for the surface.
        """
        pass

    def appendInStep(
        self, stepName: str, assignments: typing.Union[SymbolicConstant, float]
    ):
        """This method allows addition of surface crush trigger assignments to new surfaces in a
        given step.

        Parameters
        ----------
        stepName
            A String specifying the name of the step in which new surface crush trigger assignments
            are to be defined.
        assignments
            A sequence of tuples specifying the surface crush trigger assignments. Each tuple
            contains four entries:
            - A region or a material object or the SymbolicConstant GLOBAL specifying the surface to
            which the feature angle is assigned.
            - A SymbolicConstant specifying the trigger option to be used for the surface. Possible
            values of the SymbolicConstant are TRIGGER, NO_TRIGGER, or NO_CRUSH.
            - A Float specifying the crush stress value to be used for the surface.
            - A Float specifying the crush initiation angle value to be used for the surface.
            - A Float specifying the crush continuation angle value to be used for the surface.
        """
        pass

    def delete(self, indices: tuple):
        """The delete method allows you to delete existing surface crush trigger assignments from a
        ContactExp object.

        Parameters
        ----------
        indices
            A sequence of Ints specifying the index of each surface crush trigger assignment to
            delete.
        """
        pass
