from enum import Enum

from IParametre import IParametre


class IlerlemeGecisModu(Enum):
    isleme = "MfgTransitionMachiningFeedrate"  # MfgTransitionMachiningFeedrate
    yaklasma = "MfgTransitionApproachFeedrate"  # MfgTransitionApproachFeedrate
    yatayDonus = "MfgTransitionLeadInFeedrate"  # MfgTransitionLeadInFeedrate
    uzaklasma = "MfgTransitionRetractFeedrate"  # MfgTransitionRetractFeedrate
    dikeyDonus = "MfgTransitionLiftOffFeedrate"  # MfgTransitionLiftOffFeedrate
    hizli = "MfgTransitionRapidFeedrate"  # MfgTransitionRapidFeedrate
    lokal = "MfgTransitionLocalFeedrate"  # MfgTransitionLocalFeedrate
    finis = "MfgTransitionFinishingFeedrate"  # MfgTransitionFinishingFeedrate
    havaKesme = "MfgTransitionAirCuttingFeedrate"  # MfgTransitionAirCuttingFeedrate


class HatveModu(Enum):
    dalmaMiktari = "MfgMaxDepthOfCut"
    tekrarli = "MfgNumberOfLevels"
    takrarliDalmaMiktarli = "MfgNumberOfLevelsNoTop"


class CapIslemeModu(Enum):
    helisel = "MfgCircularMillingHelical"
    standart = "MfgCircularMillingStandard"


class HelisModu(Enum):
    acisal = "MfgHelixAngle"
    adimsal = "MfgHelixPitch"


class CokluHatveModu(Enum):
    tekrarliHatve = "M3xMultiPassModeByNumberAndDepth"
    tekrarliDerinlik = "M3xMultiPassModeByNumberAndTotal"
    hatveliDerinlik = "M3xMultiPassModeByDepthAndTotal"


class DikeyHatveModu(Enum):
    sabit = "M3xStepOverModeZLevelConstant"
    tarak = "M3xStepOverModeZLevelViaScallopHeight"
    konturUzaklik = "M3xStepOverModeZLevelContour"
    maksimumUzaklik = "M3xStepOverModeZLevelMaximum"


def ProfileContouring_hatve(akt):
    __mode = HatveModu(akt.parametreler["Axial strategy"].degeriStr)
    if __mode == HatveModu.dalmaMiktari:
        return akt.parametreler["Maximum depth of cut"]
    elif __mode == HatveModu.tekrarli:
        return akt.parametreler["Number of levels"]
    elif __mode == HatveModu.takrarliDalmaMiktarli:
        return (akt.parametreler["Number of levels"], akt.parametreler["Maximum depth of cut"])


def Pocketing_hatve(akt):
    __mode = HatveModu(akt.parametreler["Axial strategy"].degeriStr)
    if __mode == HatveModu.dalmaMiktari:
        return akt.parametreler["Maximum depth of cut"]
    elif __mode == HatveModu.tekrarli:
        return akt.parametreler["Number of levels"]
    elif __mode == HatveModu.takrarliDalmaMiktarli:
        return (akt.parametreler["Number of levels"], akt.parametreler["Maximum depth of cut"])


def Facing_hatve(akt):
    __mode = HatveModu(akt.parametreler["Axial strategy"].degeriStr)
    if __mode == HatveModu.dalmaMiktari:
        return akt.parametreler["Maximum depth of cut"]
    elif __mode == HatveModu.tekrarli:
        return akt.parametreler["Number of levels"]
    elif __mode == HatveModu.takrarliDalmaMiktarli:
        return (akt.parametreler["Number of levels"], akt.parametreler["Maximum depth of cut"])


def MfgFollowCurve_hatve(akt):
    return (akt.parametreler["Number of levels"], akt.parametreler["Maximum depth of cut"])


def GrooveMilling_hatve(akt):
    __mode = HatveModu(akt.parametreler["Axial strategy"].degeriStr)
    if __mode == HatveModu.dalmaMiktari:
        return akt.parametreler["Maximum depth of cut"]
    elif __mode == HatveModu.tekrarli:
        return akt.parametreler["Number of levels"]
    elif __mode == HatveModu.takrarliDalmaMiktarli:
        return (akt.parametreler["Number of levels"], akt.parametreler["Maximum depth of cut"])


def Mfg5AxisCurveMachining_hatve(akt):
    return (akt.parametreler["Number of levels"], akt.parametreler["Maximum depth of cut"])


def Mfg5AxisFlankContouring_hatve(akt):
    return (akt.parametreler["Number of levels"], akt.parametreler["Maximum depth of cut"])


def SpotDrilling_hatve(akt):
    return IParametre(obj=akt.catNesne.GetAGeometricAttribute("Depth"), sahip=akt.parametreler)


def Drilling_hatve(akt):
    return IParametre(obj=akt.catNesne.GetAGeometricAttribute("Depth"), sahip=akt.parametreler)


def DrillingDwellDelay_hatve(akt):
    return IParametre(obj=akt.catNesne.GetAGeometricAttribute("Depth"), sahip=akt.parametreler)


def DrillingDeepHole_hatve(akt):
    return akt.parametreler["Max depth of cut"]


def DrillingBreakChips_hatve(akt):
    return akt.parametreler["Max depth of cut"]


def Tapping_hatve(akt):
    return IParametre(obj=akt.catNesne.GetAGeometricAttribute("Depth"), sahip=akt.parametreler)


# def Tapping_hatve(akt):
#     return IParametre(obj=akt.catNesne.GetAGeometricAttribute("Depth"), sahip=akt.parametreler)


def ReverseThreading_hatve(akt):
    return IParametre(obj=akt.catNesne.GetAGeometricAttribute("Depth"), sahip=akt.parametreler)


def ThreadWithoutTapHead_hatve(akt):
    return IParametre(obj=akt.catNesne.GetAGeometricAttribute("Depth"), sahip=akt.parametreler)


def Boring_hatve(akt):
    return IParametre(obj=akt.catNesne.GetAGeometricAttribute("Depth"), sahip=akt.parametreler)


def BoringAndChamfering_hatve(akt):
    return IParametre(obj=akt.catNesne.GetAGeometricAttribute("Depth"), sahip=akt.parametreler)


def BoringSpindleStop_hatve(akt):
    return IParametre(obj=akt.catNesne.GetAGeometricAttribute("Depth"), sahip=akt.parametreler)


def Reaming_hatve(akt):
    return IParametre(obj=akt.catNesne.GetAGeometricAttribute("Depth"), sahip=akt.parametreler)


def CounterBoring_hatve(akt):
    return IParametre(obj=akt.catNesne.GetAGeometricAttribute("Depth"), sahip=akt.parametreler)


def CounterSinking_hatve(akt):
    return IParametre(obj=akt.catNesne.GetAGeometricAttribute("Depth"), sahip=akt.parametreler)


def Chamfering2Sides_hatve(akt):
    return IParametre(obj=akt.catNesne.GetAGeometricAttribute("Depth"), sahip=akt.parametreler)


def TSlotting_hatve(akt):
    return IParametre(obj=akt.catNesne.GetAGeometricAttribute("Depth"), sahip=akt.parametreler)


def CircularMilling_hatve(akt):
    __islemeModu = CapIslemeModu(akt.parametreler["Machining mode"].degeriStr)
    if __islemeModu == CapIslemeModu.standart:
        __hatveModu = HatveModu(akt.parametreler["Axial strategy"].degeriStr)
        if __hatveModu == HatveModu.dalmaMiktari:
            return akt.parametreler["Maximum depth of cut"]
        elif __hatveModu == HatveModu.tekrarli:
            return akt.parametreler["Number of levels"]
        elif __hatveModu == HatveModu.takrarliDalmaMiktarli:
            return (akt.parametreler["Number of levels"], akt.parametreler["Maximum depth of cut"])
    elif __islemeModu == CapIslemeModu.helisel:
        __helisModu = HelisModu(akt.parametreler["Helix mode "].degeriStr)
        if __helisModu == HelisModu.acisal:
            return akt.parametreler["Helix angle "]
        elif __helisModu == HelisModu.adimsal:
            return akt.parametreler["Helix pitch "]


def ThreadMilling_hatve(akt):
    return IParametre(obj=akt.catNesne.GetAGeometricAttribute("Depth"), sahip=akt.parametreler)


def MfgSequentialAxialOperation_hatve(akt):
    return IParametre(obj=akt.catNesne.GetAGeometricAttribute("Depth"), sahip=akt.parametreler)


def MfgSequentialGrooveOperation_hatve(akt):
    return IParametre(obj=akt.catNesne.GetAGeometricAttribute("Depth"), sahip=akt.parametreler)


def Mfg4XPocketingOperation_hatve(akt):
    __mode = HatveModu(akt.parametreler["Axial strategy"].degeriStr)
    if __mode == HatveModu.dalmaMiktari:
        return akt.parametreler["Maximum depth of cut"]
    elif __mode == HatveModu.tekrarli:
        return akt.parametreler["Number of levels"]
    elif __mode == HatveModu.takrarliDalmaMiktarli:
        return (akt.parametreler["Number of levels"], akt.parametreler["Maximum depth of cut"])


def M3xHardMaterial_hatve(akt):
    return akt.parametreler["Maximum depth of cut"]


def M3xSoftMaterial_hatve(akt):
    return akt.parametreler["Maximum depth of cut"]


def M3xMultiPockets_hatve(akt):
    return akt.parametreler["Maximum depth of cut"]


def M3xPlungeMilling_hatve(akt):
    return akt.parametreler["Maximum cutting progress"]


def M3xSweeping_hatve(akt):
    __mode = CokluHatveModu(akt.parametreler["Mode of input for Multi-Pass"].degeriStr)
    if __mode == CokluHatveModu.tekrarliHatve:
        return (
        akt.parametreler["Number of levels for Multi-Pass"], akt.parametreler["Depth of cut by level for Multi-Pass"])
    elif __mode == CokluHatveModu.tekrarliDerinlik:
        return (akt.parametreler["Number of levels for Multi-Pass"], akt.parametreler["Total height for Multi-Pass"])
    elif __mode == HatveModu.takrarliDalmaMiktarli:
        return (
        akt.parametreler["Depth of cut by level for Multi-Pass"], akt.parametreler["Total height for Multi-Pass"])


def Mfg4AxisCurveSweeping_hatve(akt):
    __mode = akt.parametreler["Active max. plunge distance"]
    if __mode.degeri:
        return akt.parametreler["Max. plunge distance"]
    else:
        return None


def Mfg5AxisGuidedCutting_hatve(akt):
    print("Hazırlanmadı")
    return None


def M3xBitangency_hatve(akt):
    __mode = CokluHatveModu(akt.parametreler["Mode of input for Multi-Pass"].degeriStr)
    if __mode == CokluHatveModu.tekrarliHatve:
        return (
        akt.parametreler["Number of levels for Multi-Pass"], akt.parametreler["Depth of cut by level for Multi-Pass"])
    elif __mode == CokluHatveModu.tekrarliDerinlik:
        return (akt.parametreler["Number of levels for Multi-Pass"], akt.parametreler["Total height for Multi-Pass"])
    elif __mode == HatveModu.takrarliDalmaMiktarli:
        return (
        akt.parametreler["Depth of cut by level for Multi-Pass"], akt.parametreler["Total height for Multi-Pass"])


def M3xZLevel_hatve(akt):
    __mode = DikeyHatveModu(akt.parametreler["Stepover mode"].degeriStr)
    if __mode == DikeyHatveModu.sabit:
        return (akt.parametreler["Maximum distance"], akt.parametreler["Scallop height"])
    if __mode == DikeyHatveModu.tarak:
        return (akt.parametreler["Maximum distance"], akt.parametreler["Minimum step distance"],
                akt.parametreler["Scallop height"])
    if __mode == DikeyHatveModu.konturUzaklik:
        return (akt.parametreler["Maximum distance"], akt.parametreler["Minimum step distance"],
                akt.parametreler["Scallop height"])
    if __mode == DikeyHatveModu.maksimumUzaklik:
        return akt.parametreler["Maximum distance"]


def M3xAdvZLevel_hatve(akt):
    return (akt.parametreler["Maximum distance"], akt.parametreler["M3xRadialStepDistance"])


def M3xBetweenContour_hatve(akt):
    __mode = CokluHatveModu(akt.parametreler["Mode of input for Multi-Pass"].degeriStr)
    if __mode == CokluHatveModu.tekrarliHatve:
        return (
            akt.parametreler["Number of levels for Multi-Pass"], akt.parametreler["Depth of cut by level for Multi-Pass"])
    elif __mode == CokluHatveModu.tekrarliDerinlik:
        return (akt.parametreler["Number of levels for Multi-Pass"], akt.parametreler["Total height for Multi-Pass"])
    elif __mode == HatveModu.takrarliDalmaMiktarli:
        return (
            akt.parametreler["Depth of cut by level for Multi-Pass"], akt.parametreler["Total height for Multi-Pass"])


def Mfg5AxisIsoparMachining_hatve(akt):
    print("Yapılmadı")
    return


def Mfg5AxisContourDriven_hatve(akt):
    print("Yapılmadı")
    return


def M3xSpiralMilling_hatve(akt):
    __mode = CokluHatveModu(akt.parametreler["Mode of input for Multi-Pass"].degeriStr)
    if __mode == CokluHatveModu.tekrarliHatve:
        return (
        akt.parametreler["Number of levels for Multi-Pass"], akt.parametreler["Depth of cut by level for Multi-Pass"])
    elif __mode == CokluHatveModu.tekrarliDerinlik:
        return (akt.parametreler["Number of levels for Multi-Pass"], akt.parametreler["Total height for Multi-Pass"])
    elif __mode == HatveModu.takrarliDalmaMiktarli:
        return (
        akt.parametreler["Depth of cut by level for Multi-Pass"], akt.parametreler["Total height for Multi-Pass"])


def Mfg5AxisSpiralMilling_hatve(akt):
    return (akt.parametreler["Maximum depth of cut"], akt.parametreler["Number of levels"])


def Mfg5AxisHelixMachining_hatve(akt):
    print("Yapılmadı")
    return


def M3xCavitiesMachining_hatve(akt):
    return akt.parametreler["Maximum depth of cut"]


def Mfg5AxisMultiPocketsFlank_hatve(akt):
    return akt.parametreler["Maximum depth of cut"]
