import IPPRDokuman
import inspect
from os.path import abspath, join, dirname

from IReferans import IReferans

__author__ = 'PC'

from win32com.client import CDispatch
from IFikomObject import IFikomObject
from IProduct import IProduct
from IMfgTakim.IMfgTakim import IMfgTakim, TakimTurIsimleri


class IPPRDokuman:
    pass


class IPPRProductlar(IFikomObject):
    def __init__(self, obj: CDispatch, sahip: IPPRDokuman = None):
        super(IPPRProductlar, self).__init__(obj, sahip)
        self.__sahip = sahip

    # --->Sabit Degiskenler

    @property
    def sahip(self) -> IPPRDokuman:
        return self.__sahip

    @property
    def sayisi(self):
        return self.catNesne.Count

    def ekle(self, Product) -> IProduct:
        ObjeTemp = None
        if isinstance(Product, IFikomObject):
            ObjeTemp = Product.catNesne
        else:
            ObjeTemp = Product
        self.catNesne.Add(ObjeTemp)
        return self.item(self.sayisi - 1)

    def item(self, i) -> IProduct:
        if type(i) == int:
            i = i + 1
        return IProduct(obj=self.catNesne.Item(i), sahip=self)

    def takim_ekle(self, takim_tipi: TakimTurIsimleri = TakimTurIsimleri.Normal, **kwargs):
        __selfDoc = self.sahip
        # [A] STANDART TAKIM KÜTÜPHANESİ OKUNUYOR
        __toolDoc = self.anaProgram.dokumanlar.oku(join(dirname(abspath(
            inspect.getfile(inspect.currentframe()))), "FTK.pyd"))

        if takim_tipi == TakimTurIsimleri.Normal:  # [A] Frezeleme Takımı
            MFG_NAME = kwargs.get("name", "MfgEndMillTool")
            MFG_COMMENT = kwargs.get("comment", "")
            MFG_TOOL_NUMBER = kwargs.get("tool_number", "1")
            # --->
            MFG_NOMINAL_DIAM = kwargs.get("nominal_diameter", "10mm")
            MFG_CORNER_RAD = kwargs.get("corner_radius", "2mm")
            MFG_OVERALL_LGTH = kwargs.get("overall_length", "100mm")
            MFG_CUT_LENGTH = kwargs.get("cutting_length", "50mm")
            MFG_LENGTH = kwargs.get("length", "60mm")
            MFG_BODY_DIAM = kwargs.get("body_diameter", "15mm")
            MFG_TOOL_CORE_DIAMETER = kwargs.get("non_cutting_diameter", "0mm")
            # --->
            __tkm = __toolDoc.asPPRDokuman.kaynaklar.item(0)
            _rslt = self.ekle(__tkm)
            __toolDoc.kapat()

            __tkmPrm = _rslt.parametreler.altParametreler(
                _rslt.asType("Reference", IReferans), True)
            __tkmPrm["Name>>>"].degeriStr = MFG_NAME
            __tkmPrm["Comment>>>"].degeriStr = MFG_COMMENT
            __tkmPrm["Tool number>>>"].degeriStr = MFG_TOOL_NUMBER
            __tkmPrm["Nominal diameter>>>"].degeriStr = MFG_NOMINAL_DIAM
            __tkmPrm["Corner radius>>>"].degeriStr = MFG_CORNER_RAD
            __tkmPrm["Overall length>>>"].degeriStr = MFG_OVERALL_LGTH
            __tkmPrm["Cutting length>>>"].degeriStr = MFG_CUT_LENGTH
            __tkmPrm["Length>>>"].degeriStr = MFG_LENGTH
            __tkmPrm["Body diameter>>>"].degeriStr = MFG_BODY_DIAM
            __tkmPrm["Non cutting diameter>>>"].degeriStr = MFG_TOOL_CORE_DIAMETER
            # --->
            return _rslt
        elif takim_tipi == TakimTurIsimleri.Yuzey:
            MFG_NAME = kwargs.get("name", "MfgFaceMillTool")
            MFG_COMMENT = kwargs.get("comment", "")
            MFG_TOOL_NUMBER = kwargs.get("tool_number", "1")
            # --->
            MFG_NOMINAL_DIAM = kwargs.get("nominal_diameter", "50mm")
            MFG_CORNER_RAD = kwargs.get("corner_radius", "5mm")
            MFG_OVERALL_LGTH = kwargs.get("overall_length", "30mm")
            MFG_CUT_LENGTH = kwargs.get("cutting_length", "5mm")
            MFG_LENGTH = kwargs.get("length", "15mm")
            MFG_BODY_DIAM = kwargs.get("body_diameter", "25mm")
            MFG_OUSTSIDE_DIAM = kwargs.get("outside_diameter", "50mm")
            MFG_CUT_ANGLE = kwargs.get("cutting_angle", "90deg")
            MFG_TOOL_CORE_DIAMETER = kwargs.get("non_cutting_diameter", "0mm")
            # --->
            __tkm = __toolDoc.asPPRDokuman.kaynaklar.item(1)
            _rslt = self.ekle(__tkm)
            __toolDoc.kapat()
            __tkmPrm = _rslt.parametreler.altParametreler(
                _rslt.asType("Reference", IReferans), True)
            __tkmPrm["Name>>>"].degeriStr = MFG_NAME
            __tkmPrm["Comment>>>"].degeriStr = MFG_COMMENT
            __tkmPrm["Tool number>>>"].degeriStr = MFG_TOOL_NUMBER
            __tkmPrm["Nominal diameter>>>"].degeriStr = MFG_NOMINAL_DIAM
            __tkmPrm["Corner radius>>>"].degeriStr = MFG_CORNER_RAD
            __tkmPrm["Overall length>>>"].degeriStr = MFG_OVERALL_LGTH
            __tkmPrm["Cutting length>>>"].degeriStr = MFG_CUT_LENGTH
            __tkmPrm["Length>>>"].degeriStr = MFG_LENGTH
            __tkmPrm["Body diameter>>>"].degeriStr = MFG_BODY_DIAM
            __tkmPrm["Outside diameter>>>"].degeriStr = MFG_OUSTSIDE_DIAM
            __tkmPrm["Cutting angle>>>"].degeriStr = MFG_CUT_ANGLE

            __tkmPrm["Non cutting diameter"].degeriStr = MFG_TOOL_CORE_DIAMETER
            # --->
            return _rslt
        elif takim_tipi == TakimTurIsimleri.Konik:
            MFG_NAME = kwargs.get("name", "MfgConicalMillTool")
            MFG_COMMENT = kwargs.get("comment", "")
            MFG_TOOL_NUMBER = kwargs.get("tool_number", "1")
            # --->
            MFG_NOMINAL_DIAM = kwargs.get("nominal_diameter", "25mm")
            MFG_CORNER_RAD = kwargs.get("corner_radius", "2mm")
            MFG_OVERALL_LGTH = kwargs.get("overall_length", "100mm")
            MFG_CUT_LENGTH = kwargs.get("cutting_length", "40mm")
            MFG_LENGTH = kwargs.get("length", "15mm")
            MFG_BODY_DIAM = kwargs.get("body_diameter", "10mm")
            MFG_ENTRY_DIAM = kwargs.get("entry_diameter", "11,477mm")
            MFG_CUT_ANGLE = kwargs.get("cutting_angle", "20deg")
            # --->
            __tkm = __toolDoc.asPPRDokuman.kaynaklar.item(2)
            _rslt = self.ekle(__tkm)
            __toolDoc.kapat()
            __tkmPrm = _rslt.parametreler.altParametreler(
                _rslt.asType("Reference", IReferans), True)
            __tkmPrm["Name>>>"].degeriStr = MFG_NAME
            __tkmPrm["Comment>>>"].degeriStr = MFG_COMMENT
            __tkmPrm["Tool number>>>"].degeriStr = MFG_TOOL_NUMBER
            __tkmPrm["Nominal diameter>>>"].degeriStr = MFG_NOMINAL_DIAM
            __tkmPrm["Corner radius>>>"].degeriStr = MFG_CORNER_RAD
            __tkmPrm["Overall length>>>"].degeriStr = MFG_OVERALL_LGTH
            __tkmPrm["Cutting length>>>"].degeriStr = MFG_CUT_LENGTH
            __tkmPrm["Length>>>"].degeriStr = MFG_LENGTH
            __tkmPrm["Body diameter>>>"].degeriStr = MFG_BODY_DIAM
            __tkmPrm["Entry diameter>>>"].degeriStr = MFG_ENTRY_DIAM
            __tkmPrm["Cutting angle>>>"].degeriStr = MFG_CUT_ANGLE
            # --->
            return _rslt
        elif takim_tipi == TakimTurIsimleri.Matkap:
            MFG_NAME = kwargs.get("name")
            MFG_COMMENT = kwargs.get("comment", "")
            MFG_TOOL_NUMBER = kwargs.get("tool_number", "1")
            # --->
            MFG_NOMINAL_DIAM = kwargs.get("nominal_diameter", "10mm")
            MFG_OVERALL_LGTH = kwargs.get("overall_length", "100mm")
            MFG_CUT_LENGTH = kwargs.get("cutting_length", "50mm")
            MFG_LENGTH = kwargs.get("length", "60mm")
            MFG_BODY_DIAM = kwargs.get("body_diameter", "15mm")
            MFG_CUT_ANGLE = kwargs.get("cutting_angle", "120deg")
            MFG_TL_TIP_LGTH = kwargs.get("tool_tip_length", "2,887mm")
            # --->
            __tkm = __toolDoc.asPPRDokuman.kaynaklar.item(3)
            _rslt = self.ekle(__tkm)
            __toolDoc.kapat()
            __tkmPrm = _rslt.parametreler.altParametreler(
                _rslt.asType("Reference", IReferans), True)
            __tkmPrm["Name>>>"].degeriStr = MFG_NAME
            __tkmPrm["Comment>>>"].degeriStr = MFG_COMMENT
            __tkmPrm["Tool number>>>"].degeriStr = MFG_TOOL_NUMBER
            __tkmPrm["Nominal diameter>>>"].degeriStr = MFG_NOMINAL_DIAM
            __tkmPrm["Overall length>>>"].degeriStr = MFG_OVERALL_LGTH
            __tkmPrm["Cutting length>>>"].degeriStr = MFG_CUT_LENGTH
            __tkmPrm["Length>>>"].degeriStr = MFG_LENGTH
            __tkmPrm["Body diameter>>>"].degeriStr = MFG_BODY_DIAM
            __tkmPrm["Cutting angle>>>"].degeriStr = MFG_CUT_ANGLE
            __tkmPrm["Tool tip length>>>"].degeriStr = MFG_TL_TIP_LGTH
            # --->
            return _rslt
        elif takim_tipi == TakimTurIsimleri.Nokta:
            MFG_NAME = kwargs.get("name")
            MFG_COMMENT = kwargs.get("comment", "")
            MFG_TOOL_NUMBER = kwargs.get("tool_number", "1")
            # --->
            MFG_NOMINAL_DIAM = kwargs.get("nominal_diameter", "15mm")
            MFG_OVERALL_LGTH = kwargs.get("overall_length", "100mm")
            MFG_LENGTH = kwargs.get("length", "50mm")
            MFG_BODY_DIAM = kwargs.get("body_diameter", "15mm")
            MFG_CUT_ANGLE = kwargs.get("cutting_angle", "120deg")
            # --->
            __tkm = __toolDoc.asPPRDokuman.kaynaklar.item(4)
            _rslt = self.ekle(__tkm)
            __toolDoc.kapat()
            __tkmPrm = _rslt.parametreler.altParametreler(
                _rslt.asType("Reference", IReferans), True)
            __tkmPrm["Name>>>"].degeriStr = MFG_NAME
            __tkmPrm["Comment>>>"].degeriStr = MFG_COMMENT
            __tkmPrm["Tool number>>>"].degeriStr = MFG_TOOL_NUMBER
            __tkmPrm["Nominal diameter>>>"].degeriStr = MFG_NOMINAL_DIAM
            __tkmPrm["Overall length>>>"].degeriStr = MFG_OVERALL_LGTH
            __tkmPrm["Length>>>"].degeriStr = MFG_LENGTH
            __tkmPrm["Body diameter>>>"].degeriStr = MFG_BODY_DIAM
            __tkmPrm["Cutting angle>>>"].degeriStr = MFG_CUT_ANGLE
            # --->
            return _rslt
        elif takim_tipi == TakimTurIsimleri.Punta:
            MFG_NAME = kwargs.get("name")
            MFG_COMMENT = kwargs.get("comment", "")
            MFG_TOOL_NUMBER = kwargs.get("tool_number", "1")
            # --->
            MFG_NOMINAL_DIAM = kwargs.get("nominal_diameter", "2,5mm")
            MFG_OVERALL_LGTH = kwargs.get("overall_length", "50mm")
            MFG_CUT_LENGTH = kwargs.get("cutting_length", "11mm")
            MFG_LENGTH = kwargs.get("length", "5mm")
            MFG_BODY_DIAM = kwargs.get("body_diameter", "10mm")
            MFG_CUT_ANGLE = kwargs.get("cutting_angle", "118deg")
            MFG_TAPER_ANGLE = kwargs.get("taper_angle", "60deg")
            # --->
            __tkm = __toolDoc.asPPRDokuman.kaynaklar.item(5)
            _rslt = self.ekle(__tkm)
            __toolDoc.kapat()
            __tkmPrm = _rslt.parametreler.altParametreler(
                _rslt.asType("Reference", IReferans), True)
            __tkmPrm["Name>>>"].degeriStr = MFG_NAME
            __tkmPrm["Comment>>>"].degeriStr = MFG_COMMENT
            __tkmPrm["Tool number>>>"].degeriStr = MFG_TOOL_NUMBER
            __tkmPrm["Nominal diameter>>>"].degeriStr = MFG_NOMINAL_DIAM
            __tkmPrm["Overall length>>>"].degeriStr = MFG_OVERALL_LGTH
            __tkmPrm["Cutting length>>>"].degeriStr = MFG_CUT_LENGTH
            __tkmPrm["Length>>>"].degeriStr = MFG_LENGTH
            __tkmPrm["Body diameter>>>"].degeriStr = MFG_BODY_DIAM
            __tkmPrm["Cutting angle>>>"].degeriStr = MFG_CUT_ANGLE
            __tkmPrm["Taper angle>>>"].degeriStr = MFG_TAPER_ANGLE
            # --->
            return _rslt
        elif takim_tipi == TakimTurIsimleri.Cift_Cap_Matkap:
            MFG_NAME = kwargs.get("name")
            MFG_COMMENT = kwargs.get("comment", "")
            MFG_TOOL_NUMBER = kwargs.get("tool_number", "1")
            # --->
            MFG_NOMINAL_DIAM = kwargs.get("nominal_diameter", "10mm")
            MFG_OVERALL_LGTH = kwargs.get("overall_length", "100mm")
            MFG_CUT_LENGTH = kwargs.get("cutting_length", "50mm")
            MFG_LENGTH = kwargs.get("length", "60mm")
            MFG_BODY_DIAM = kwargs.get("body_diameter", "20mm")
            MFG_CUT_ANGLE = kwargs.get("cutting_angle", "120deg")
            MFG_TL_TIP_LGTH = kwargs.get("tool_tip_length", "2,9mm")
            MFG_CHAMFR_DIAM_1 = kwargs.get("chamfer_daimeter_1", "15mm")
            MFG_LENGTH_1 = kwargs.get("length_1", "15mm")
            MFG_TAPER_ANGLE = kwargs.get("taper_angle", "120deg")
            MFG_CHAMFR_DIAM_2 = kwargs.get("chamfer_daimeter_2", "0mm")
            MFG_LENGTH_2 = kwargs.get("length_2", "0mm")
            MFG_CUT_ANGLE_2 = kwargs.get("angle_2", "0deg")
            MFG_NB_OF_STAGES = kwargs.get("number_of_stages", "2")
            # --->
            __tkm = __toolDoc.asPPRDokuman.kaynaklar.item(6)
            _rslt = self.ekle(__tkm)
            __toolDoc.kapat()
            __tkmPrm = _rslt.parametreler.altParametreler(
                _rslt.asType("Reference", IReferans), True)
            __tkmPrm["Name>>>"].degeriStr = MFG_NAME
            __tkmPrm["Comment>>>"].degeriStr = MFG_COMMENT
            __tkmPrm["Tool number>>>"].degeriStr = MFG_TOOL_NUMBER
            __tkmPrm["Nominal diameter>>>"].degeriStr = MFG_NOMINAL_DIAM
            __tkmPrm["Overall length>>>"].degeriStr = MFG_OVERALL_LGTH
            __tkmPrm["Cutting length>>>"].degeriStr = MFG_CUT_LENGTH
            __tkmPrm["Length>>>"].degeriStr = MFG_LENGTH
            __tkmPrm["Body diameter>>>"].degeriStr = MFG_BODY_DIAM
            __tkmPrm["Cutting angle>>>"].degeriStr = MFG_CUT_ANGLE
            __tkmPrm["Tool tip length>>>"].degeriStr = MFG_TL_TIP_LGTH
            __tkmPrm["Chamfer diameter 1>>>"].degeriStr = MFG_CHAMFR_DIAM_1
            __tkmPrm["Length 1>>>"].degeriStr = MFG_LENGTH_1
            __tkmPrm["Taper angle>>>"].degeriStr = MFG_TAPER_ANGLE
            __tkmPrm["Chamfer diameter 2>>>"].degeriStr = MFG_CHAMFR_DIAM_2
            __tkmPrm["Length 2>>>"].degeriStr = MFG_LENGTH_2
            __tkmPrm["Angle 2>>>"].degeriStr = MFG_CUT_ANGLE_2
            __tkmPrm["Number of stages>>>"].degeriStr = MFG_NB_OF_STAGES
            # --->
            return _rslt
        elif takim_tipi == TakimTurIsimleri.Havsa:
            MFG_NAME = kwargs.get("name")
            MFG_COMMENT = kwargs.get("comment", "")
            MFG_TOOL_NUMBER = kwargs.get("tool_number", "1")
            # --->
            MFG_NOMINAL_DIAM = kwargs.get("nominal_diameter", "18,828mm")
            MFG_CORNER_RAD = kwargs.get("corner_radius", "2mm")
            MFG_OVERALL_LGTH = kwargs.get("overall_length", "100mm")
            MFG_CUT_LENGTH = kwargs.get("cutting_length", "5mm")
            MFG_LENGTH = kwargs.get("length", "20mm")
            MFG_BODY_DIAM = kwargs.get("body_diameter", "15mm")
            MFG_ENTRY_DIAM = kwargs.get("entry_diameter", "10mm")
            MFG_OUSTSIDE_DIAM = kwargs.get("outside_diameter", "30mm")
            MFG_CUT_ANGLE = kwargs.get("cutting_angle", "90deg")
            # --->
            __tkm = __toolDoc.asPPRDokuman.kaynaklar.item(7)
            _rslt = self.ekle(__tkm)
            __toolDoc.kapat()
            __tkmPrm = _rslt.parametreler.altParametreler(
                _rslt.asType("Reference", IReferans), True)
            __tkmPrm["Name>>>"].degeriStr = MFG_NAME
            __tkmPrm["Comment>>>"].degeriStr = MFG_COMMENT
            __tkmPrm["Tool number>>>"].degeriStr = MFG_TOOL_NUMBER
            __tkmPrm["Nominal diameter>>>"].degeriStr = MFG_NOMINAL_DIAM
            __tkmPrm["Corner radius>>>"].degeriStr = MFG_CORNER_RAD
            __tkmPrm["Overall length>>>"].degeriStr = MFG_OVERALL_LGTH
            __tkmPrm["Cutting length>>>"].degeriStr = MFG_CUT_LENGTH
            __tkmPrm["Length>>>"].degeriStr = MFG_LENGTH
            __tkmPrm["Body diameter>>>"].degeriStr = MFG_BODY_DIAM
            __tkmPrm["Entry diameter>>>"].degeriStr = MFG_ENTRY_DIAM
            __tkmPrm["Outside diameter>>>"].degeriStr = MFG_OUSTSIDE_DIAM
            __tkmPrm["Cutting angle>>>"].degeriStr = MFG_CUT_ANGLE
            # --->
            return _rslt
        elif takim_tipi == TakimTurIsimleri.Tap:
            MFG_NAME = kwargs.get("name")
            MFG_COMMENT = kwargs.get("comment", "")
            MFG_TOOL_NUMBER = kwargs.get("tool_number", "1")
            # --->
            MFG_NOMINAL_DIAM = kwargs.get("nominal_diameter", "10mm")
            MFG_OVERALL_LGTH = kwargs.get("overall_length", "100mm")
            MFG_CUT_LENGTH = kwargs.get("cutting_length", "50mm")
            MFG_LENGTH = kwargs.get("length", "60mm")
            MFG_BODY_DIAM = kwargs.get("body_diameter", "15mm")
            MFG_ENTRY_DIAM = kwargs.get("entry_diameter", "8mm")
            MFG_TL_TIP_LGTH = kwargs.get("tool_tip_length", "2mm")
            MFG_TAPER_ANGLE = kwargs.get("taper_angle", "0deg")
            MFG_LENGTH_NOM_DIAM = kwargs.get(
                "nominal_diameter_location", "0mm")
            # --->
            __tkm = __toolDoc.asPPRDokuman.kaynaklar.item(8)
            _rslt = self.ekle(__tkm)
            __toolDoc.kapat()
            __tkmPrm = _rslt.parametreler.altParametreler(
                _rslt.asType("Reference", IReferans), True)
            __tkmPrm["Name>>>"].degeriStr = MFG_NAME
            __tkmPrm["Comment>>>"].degeriStr = MFG_COMMENT
            __tkmPrm["Tool number>>>"].degeriStr = MFG_TOOL_NUMBER
            __tkmPrm["Nominal diameter>>>"].degeriStr = MFG_NOMINAL_DIAM
            __tkmPrm["Overall length>>>"].degeriStr = MFG_OVERALL_LGTH
            __tkmPrm["Cutting length>>>"].degeriStr = MFG_CUT_LENGTH
            __tkmPrm["Length>>>"].degeriStr = MFG_LENGTH
            __tkmPrm["Body diameter>>>"].degeriStr = MFG_BODY_DIAM
            __tkmPrm["Entry diameter>>>"].degeriStr = MFG_ENTRY_DIAM
            __tkmPrm["Tool tip length>>>"].degeriStr = MFG_TL_TIP_LGTH
            __tkmPrm["Taper angle>>>"].degeriStr = MFG_TAPER_ANGLE
            __tkmPrm["Nominal Diam. location>>>"].degeriStr = MFG_LENGTH_NOM_DIAM
            # --->
            return _rslt
        elif takim_tipi == TakimTurIsimleri.Cift_Taraf_Pah:
            MFG_NAME = kwargs.get("name")
            MFG_COMMENT = kwargs.get("comment", "")
            MFG_TOOL_NUMBER = kwargs.get("tool_number", "1")
            # --->
            MFG_NOMINAL_DIAM = kwargs.get("nominal_diameter", "20mm")
            MFG_OVERALL_LGTH = kwargs.get("overall_length", "100mm")
            MFG_CUT_LENGTH = kwargs.get("cutting_length", "50mm")
            MFG_LENGTH = kwargs.get("length", "70mm")
            MFG_BODY_DIAM = kwargs.get("body_diameter", "10mm")
            MFG_ENTRY_DIAM = kwargs.get("entry_diameter", "10mm")
            MFG_CUT_ANGLE = kwargs.get("cutting_angle", "120deg")
            MFG_TL_TIP_LGTH = kwargs.get("tool_tip_length", "5mm")
            MFG_CUT_ANGLE_2 = kwargs.get("angle_2", "120deg")
            # --->
            __tkm = __toolDoc.asPPRDokuman.kaynaklar.item(9)
            _rslt = self.ekle(__tkm)
            __toolDoc.kapat()
            __tkmPrm = _rslt.parametreler.altParametreler(
                _rslt.asType("Reference", IReferans), True)
            __tkmPrm["Name>>>"].degeriStr = MFG_NAME
            __tkmPrm["Comment>>>"].degeriStr = MFG_COMMENT
            __tkmPrm["Tool number>>>"].degeriStr = MFG_TOOL_NUMBER
            __tkmPrm["Nominal diameter>>>"].degeriStr = MFG_NOMINAL_DIAM
            __tkmPrm["Overall length>>>"].degeriStr = MFG_OVERALL_LGTH
            __tkmPrm["Cutting length>>>"].degeriStr = MFG_CUT_LENGTH
            __tkmPrm["Length>>>"].degeriStr = MFG_LENGTH
            __tkmPrm["Body diameter>>>"].degeriStr = MFG_BODY_DIAM
            __tkmPrm["Entry diameter>>>"].degeriStr = MFG_ENTRY_DIAM
            __tkmPrm["Cutting angle>>>"].degeriStr = MFG_CUT_ANGLE
            __tkmPrm["Tool tip length>>>"].degeriStr = MFG_TL_TIP_LGTH
            __tkmPrm["Angle 2>>>"].degeriStr = MFG_CUT_ANGLE_2
            # --->
            return _rslt
        elif takim_tipi == TakimTurIsimleri.Delik_Pah:
            MFG_NAME = kwargs.get("name")
            MFG_COMMENT = kwargs.get("comment", "")
            MFG_TOOL_NUMBER = kwargs.get("tool_number", "1")
            # --->
            MFG_NOMINAL_DIAM = kwargs.get("nominal_diameter", "10mm")
            MFG_CORNER_RAD = kwargs.get("corner_radius", "2mm")
            MFG_OVERALL_LGTH = kwargs.get("overall_length", "100mm")
            MFG_CUT_LENGTH = kwargs.get("cutting_length", "30mm")
            MFG_LENGTH = kwargs.get("length", "60mm")
            MFG_BODY_DIAM = kwargs.get("body_diameter", "20mm")
            MFG_CHAMFR_DIAM_1 = kwargs.get("chamfer_daimeter_1", "30mm")
            MFG_LENGTH_1 = kwargs.get("length_1", "25mm")
            MFG_TAPER_ANGLE = kwargs.get("taper_angle", "120deg")
            # --->
            __tkm = __toolDoc.asPPRDokuman.kaynaklar.item(10)
            _rslt = self.ekle(__tkm)
            __toolDoc.kapat()
            __tkmPrm = _rslt.parametreler.altParametreler(
                _rslt.asType("Reference", IReferans), True)
            __tkmPrm["Name>>>"].degeriStr = MFG_NAME
            __tkmPrm["Comment>>>"].degeriStr = MFG_COMMENT
            __tkmPrm["Tool number>>>"].degeriStr = MFG_TOOL_NUMBER
            __tkmPrm["Nominal diameter>>>"].degeriStr = MFG_NOMINAL_DIAM
            __tkmPrm["Corner radius>>>"].degeriStr = MFG_CORNER_RAD
            __tkmPrm["Overall length>>>"].degeriStr = MFG_OVERALL_LGTH
            __tkmPrm["Cutting length>>>"].degeriStr = MFG_CUT_LENGTH
            __tkmPrm["Length>>>"].degeriStr = MFG_LENGTH
            __tkmPrm["Body diameter>>>"].degeriStr = MFG_BODY_DIAM
            __tkmPrm["Chamfer diameter 1>>>"].degeriStr = MFG_CHAMFR_DIAM_1
            __tkmPrm["Length 1>>>"].degeriStr = MFG_LENGTH_1
            __tkmPrm["Taper angle>>>"].degeriStr = MFG_TAPER_ANGLE
            # --->
            return _rslt
        elif takim_tipi == TakimTurIsimleri.Bara:
            MFG_NAME = kwargs.get("name")
            MFG_COMMENT = kwargs.get("comment", "")
            MFG_TOOL_NUMBER = kwargs.get("tool_number", "1")
            # --->
            MFG_NOMINAL_DIAM = kwargs.get("nominal_diameter", "25mm")
            MFG_OVERALL_LGTH = kwargs.get("overall_length", "60mm")
            MFG_CUT_LENGTH = kwargs.get("cutting_length", "15mm")
            MFG_LENGTH = kwargs.get("length", "25mm")
            MFG_BODY_DIAM = kwargs.get("body_diameter", "10mm")
            MFG_CUT_ANGLE = kwargs.get("cutting_angle", "85deg")
            MFG_TL_TIP_LGTH = kwargs.get("tool_tip_length", "10mm")
            MFG_NON_CUT_DIAM = kwargs.get("non_cut_diameter", "10mm")
            MFG_MIN_DIAMETER = kwargs.get("minimum_diameter", "0,05mm")
            MFG_MAX_DIAMETER = kwargs.get("maximum_diameter", "30mm")
            MFG_TIP_ANGLE = kwargs.get("tip_angle", "85deg")
            MFG_TIP_RADIUS = kwargs.get("tip_radius", "0,5mm")
            MFG_TIP_LENGTH = kwargs.get("tip_length", "2,5mm")
            MFG_TOOL_ANGLE = kwargs.get("tool_angle", "60deg")
            # --->
            __tkm = __toolDoc.asPPRDokuman.kaynaklar.item(11)
            _rslt = self.ekle(__tkm)
            __toolDoc.kapat()
            __tkmPrm = _rslt.parametreler.altParametreler(
                _rslt.asType("Reference", IReferans), True)
            __tkmPrm["Name>>>"].degeriStr = MFG_NAME
            __tkmPrm["Comment>>>"].degeriStr = MFG_COMMENT
            __tkmPrm["Tool number>>>"].degeriStr = MFG_TOOL_NUMBER
            __tkmPrm["Nominal diameter>>>"].degeriStr = MFG_NOMINAL_DIAM
            __tkmPrm["Overall length>>>"].degeriStr = MFG_OVERALL_LGTH
            __tkmPrm["Cutting length>>>"].degeriStr = MFG_CUT_LENGTH
            __tkmPrm["Length>>>"].degeriStr = MFG_LENGTH
            __tkmPrm["Body diameter>>>"].degeriStr = MFG_BODY_DIAM
            __tkmPrm["Cutting angle>>>"].degeriStr = MFG_CUT_ANGLE
            __tkmPrm["Tool tip length>>>"].degeriStr = MFG_TL_TIP_LGTH
            __tkmPrm["Non cut diameter>>>"].degeriStr = MFG_NON_CUT_DIAM
            __tkmPrm["Minimum diameter>>>"].degeriStr = MFG_MIN_DIAMETER
            __tkmPrm["Maximum diameter>>>"].degeriStr = MFG_MAX_DIAMETER
            __tkmPrm["Tip angle>>>"].degeriStr = MFG_TIP_ANGLE
            __tkmPrm["Tip radius>>>"].degeriStr = MFG_TIP_RADIUS
            __tkmPrm["Tip length>>>"].degeriStr = MFG_TIP_LENGTH
            __tkmPrm["Tool angle>>>"].degeriStr = MFG_TOOL_ANGLE
            # --->
            return _rslt
        elif takim_tipi == TakimTurIsimleri.Rayba:
            MFG_NAME = kwargs.get("name")
            MFG_COMMENT = kwargs.get("comment", "")
            MFG_TOOL_NUMBER = kwargs.get("tool_number", "1")
            # --->
            MFG_NOMINAL_DIAM = kwargs.get("nominal_diameter", "10mm")
            MFG_OVERALL_LGTH = kwargs.get("overall_length", "100mm")
            MFG_CUT_LENGTH = kwargs.get("cutting_length", "50mm")
            MFG_LENGTH = kwargs.get("length", "60mm")
            MFG_BODY_DIAM = kwargs.get("body_diameter", "15mm")
            MFG_ENTRY_DIAM = kwargs.get("entry_diameter", "8mm")
            MFG_TL_TIP_LGTH = kwargs.get("tool_tip_length", "2mm")
            # --->
            __tkm = __toolDoc.asPPRDokuman.kaynaklar.item(12)
            _rslt = self.ekle(__tkm)
            __toolDoc.kapat()
            __tkmPrm = _rslt.parametreler.altParametreler(
                _rslt.asType("Reference", IReferans), True)
            __tkmPrm["Name>>>"].degeriStr = MFG_NAME
            __tkmPrm["Comment>>>"].degeriStr = MFG_COMMENT
            __tkmPrm["Tool number>>>"].degeriStr = MFG_TOOL_NUMBER
            __tkmPrm["Nominal diameter>>>"].degeriStr = MFG_NOMINAL_DIAM
            __tkmPrm["Overall length>>>"].degeriStr = MFG_OVERALL_LGTH
            __tkmPrm["Cutting length>>>"].degeriStr = MFG_CUT_LENGTH
            __tkmPrm["Length>>>"].degeriStr = MFG_LENGTH
            __tkmPrm["Body diameter>>>"].degeriStr = MFG_BODY_DIAM
            __tkmPrm["Entry diameter>>>"].degeriStr = MFG_ENTRY_DIAM
            __tkmPrm["Tool tip length>>>"].degeriStr = MFG_TL_TIP_LGTH
            # --->
            return _rslt
        elif takim_tipi == TakimTurIsimleri.T_Cakisi:
            MFG_NAME = kwargs.get("name")
            MFG_COMMENT = kwargs.get("comment", "")
            MFG_TOOL_NUMBER = kwargs.get("tool_number", "1")
            # --->
            MFG_NOMINAL_DIAM = kwargs.get("nominal_diameter", "50mm")
            MFG_CORNER_RAD = kwargs.get("corner_radius", "0mm")
            MFG_CORNER_RAD_2 = kwargs.get("upper_corner_radius", "0mm")
            MFG_OVERALL_LGTH = kwargs.get("overall_length", "100mm")
            MFG_LENGTH = kwargs.get("length", "10mm")
            MFG_BODY_DIAM = kwargs.get("body_diameter", "15mm")
            MFG_LOWER_ANGLE = kwargs.get("bottom_chamfer_angle", "180deg")
            MFG_UPPER_ANGLE = kwargs.get("top_chamfer_angle", "180deg")
            MFG_LOWER_DIAM = kwargs.get("bottom_diameter", "50mm")
            MFG_UPPER_DIAM = kwargs.get("top_diameter", "50mm")
            # --->
            __tkm = __toolDoc.asPPRDokuman.kaynaklar.item(13)
            _rslt = self.ekle(__tkm)
            __toolDoc.kapat()
            __tkmPrm = _rslt.parametreler.altParametreler(
                _rslt.asType("Reference", IReferans), True)
            __tkmPrm["Name>>>"].degeriStr = MFG_NAME
            __tkmPrm["Comment>>>"].degeriStr = MFG_COMMENT
            __tkmPrm["Tool number>>>"].degeriStr = MFG_TOOL_NUMBER
            __tkmPrm["Nominal diameter>>>"].degeriStr = MFG_NOMINAL_DIAM
            __tkmPrm["Corner radius>>>"].degeriStr = MFG_CORNER_RAD
            __tkmPrm["Upper corner radius>>>"].degeriStr = MFG_CORNER_RAD_2
            __tkmPrm["Overall length>>>"].degeriStr = MFG_OVERALL_LGTH
            __tkmPrm["Length>>>"].degeriStr = MFG_LENGTH
            __tkmPrm["Body diameter>>>"].degeriStr = MFG_BODY_DIAM
            __tkmPrm["Bottom chamfer angle>>>"].degeriStr = MFG_LOWER_ANGLE
            __tkmPrm["Top chamfer angle>>>"].degeriStr = MFG_UPPER_ANGLE
            __tkmPrm["Bottom diameter>>>"].degeriStr = MFG_LOWER_DIAM
            __tkmPrm["Top diameter>>>"].degeriStr = MFG_UPPER_DIAM
            # --->
            return _rslt
        elif takim_tipi == TakimTurIsimleri.Kilavuz:
            MFG_NAME = kwargs.get("name")
            MFG_COMMENT = kwargs.get("comment", "")
            MFG_TOOL_NUMBER = kwargs.get("tool_number", "1")
            # --->
            MFG_NOMINAL_DIAM = kwargs.get("nominal_diameter", "10mm")
            MFG_OVERALL_LGTH = kwargs.get("overall_length", "100mm")
            MFG_CUT_LENGTH = kwargs.get("cutting_length", "50mm")
            MFG_LENGTH = kwargs.get("length", "60mm")
            MFG_BODY_DIAM = kwargs.get("body_diameter", "15mm")
            MFG_ENTRY_DIAM = kwargs.get("entry_diameter", "10mm")
            MFG_OUSTSIDE_DIAM = kwargs.get("outside_diameter", "12mm")
            MFG_LENGTH_1 = kwargs.get("length_1", "49,423mm")
            MFG_TAPER_ANGLE = kwargs.get("taper_angle", "120deg")
            MFG_CHAMFER_ANGLE = kwargs.get("chamfer_angle", "180deg")
            # --->
            __tkm = __toolDoc.asPPRDokuman.kaynaklar.item(14)
            _rslt = self.ekle(__tkm)
            __toolDoc.kapat()
            __tkmPrm = _rslt.parametreler.altParametreler(
                _rslt.asType("Reference", IReferans), True)
            __tkmPrm["Name>>>"].degeriStr = MFG_NAME
            __tkmPrm["Comment>>>"].degeriStr = MFG_COMMENT
            __tkmPrm["Tool number>>>"].degeriStr = MFG_TOOL_NUMBER
            __tkmPrm["Nominal diameter>>>"].degeriStr = MFG_NOMINAL_DIAM
            __tkmPrm["Overall length>>>"].degeriStr = MFG_OVERALL_LGTH
            __tkmPrm["Length>>>"].degeriStr = MFG_LENGTH
            __tkmPrm["Cutting length>>>"].degeriStr = MFG_CUT_LENGTH
            __tkmPrm["Body diameter>>>"].degeriStr = MFG_BODY_DIAM
            __tkmPrm["Entry diameter>>>"].degeriStr = MFG_ENTRY_DIAM
            __tkmPrm["Outside diameter>>>"].degeriStr = MFG_OUSTSIDE_DIAM
            __tkmPrm["Length 1>>>"].degeriStr = MFG_LENGTH_1
            __tkmPrm["Taper angle>>>"].degeriStr = MFG_TAPER_ANGLE
            __tkmPrm["MFG_CHAMFER_ANGLE>>>"].degeriStr = MFG_CHAMFER_ANGLE
            # --->
            return _rslt
        elif takim_tipi == TakimTurIsimleri.Kafa_Matkabi:
            MFG_NAME = kwargs.get("name")
            MFG_COMMENT = kwargs.get("comment", "")
            MFG_TOOL_NUMBER = kwargs.get("tool_number", "1")
            # --->
            MFG_NOMINAL_DIAM = kwargs.get("nominal_diameter", "20mm")
            MFG_OVERALL_LGTH = kwargs.get("overall_length", "100mm")
            MFG_CUT_LENGTH = kwargs.get("cutting_length", "15mm")
            MFG_LENGTH = kwargs.get("length", "60mm")
            MFG_BODY_DIAM = kwargs.get("body_diameter", "15mm")
            MFG_ENTRY_DIAM = kwargs.get("entry_diameter", "10mm")
            MFG_TL_TIP_LGTH = kwargs.get("tool_tip_length", "5mm")
            # --->
            __tkm = __toolDoc.asPPRDokuman.kaynaklar.item(15)
            _rslt = self.ekle(__tkm)
            __toolDoc.kapat()
            __tkmPrm = _rslt.parametreler.altParametreler(
                _rslt.asType("Reference", IReferans), True)
            __tkmPrm["Name>>>"].degeriStr = MFG_NAME
            __tkmPrm["Comment>>>"].degeriStr = MFG_COMMENT
            __tkmPrm["Tool number>>>"].degeriStr = MFG_TOOL_NUMBER
            __tkmPrm["Nominal diameter>>>"].degeriStr = MFG_NOMINAL_DIAM
            __tkmPrm["Overall length>>>"].degeriStr = MFG_OVERALL_LGTH
            __tkmPrm["Length>>>"].degeriStr = MFG_LENGTH
            __tkmPrm["Cutting length>>>"].degeriStr = MFG_CUT_LENGTH
            __tkmPrm["Body diameter>>>"].degeriStr = MFG_BODY_DIAM
            __tkmPrm["Entry diameter>>>"].degeriStr = MFG_ENTRY_DIAM
            __tkmPrm["Tool tip length>>>"].degeriStr = MFG_TL_TIP_LGTH
            # --->
            return _rslt
        elif takim_tipi == TakimTurIsimleri.Varil_Takimi:
            MFG_NAME = kwargs.get("name")
            MFG_COMMENT = kwargs.get("comment", "")
            MFG_TOOL_NUMBER = kwargs.get("tool_number", "1")
            # --->
            MFG_BARREL_RADIUS = kwargs.get("Barrel radius", "50mm")
            MFG_CORNER_RAD = kwargs.get("corner_radius", "2,137mm")
            MFG_OVERALL_LGTH = kwargs.get("overall_length", "100mm")
            MFG_CUT_LENGTH = kwargs.get("cutting_length", "46mm")
            MFG_BODY_DIAM = kwargs.get("body_diameter", "18,792mm")
            MFG_ENTRY_DIAM = kwargs.get("entry_diameter", "20mm")
            MFG_RADIAL_DISTANCE = kwargs.get("radial_distance", "35mm")
            MFG_VERTICAL_DISTANCE = kwargs.get("vartical_distance", "23mm")
            # --->
            __tkm = __toolDoc.asPPRDokuman.kaynaklar.item(16)
            _rslt = self.ekle(__tkm)
            __toolDoc.kapat()
            __tkmPrm = _rslt.parametreler.altParametreler(
                _rslt.asType("Reference", IReferans), True)
            __tkmPrm["Name>>>"].degeriStr = MFG_NAME
            __tkmPrm["Comment>>>"].degeriStr = MFG_COMMENT
            __tkmPrm["Tool number>>>"].degeriStr = MFG_TOOL_NUMBER
            __tkmPrm["Barrel radius >>>"].degeriStr = MFG_BARREL_RADIUS
            __tkmPrm["Corner radius>>>"].degeriStr = MFG_CORNER_RAD
            __tkmPrm["Overall length>>>"].degeriStr = MFG_OVERALL_LGTH
            __tkmPrm["Cutting length>>>"].degeriStr = MFG_CUT_LENGTH
            __tkmPrm["Body diameter>>>"].degeriStr = MFG_BODY_DIAM
            __tkmPrm["Entry diameter>>>"].degeriStr = MFG_ENTRY_DIAM
            __tkmPrm["Radial distance >>>"].degeriStr = MFG_RADIAL_DISTANCE
            __tkmPrm["Vertical distance >>>"].degeriStr = MFG_VERTICAL_DISTANCE
            # --->
            return _rslt
        elif takim_tipi == TakimTurIsimleri.Top_Takimi:
            MFG_NAME = kwargs.get("name")
            MFG_COMMENT = kwargs.get("comment", "")
            MFG_TOOL_NUMBER = kwargs.get("tool_number", "1")
            # --->
            MFG_NOMINAL_DIAM = kwargs.get("nominal_diameter", "5mm")
            MFG_OVERALL_LGTH = kwargs.get("overall_length", "30mm")
            MFG_LENGTH = kwargs.get("length", "4,665mm")
            MFG_BALL_LENGTH_DOWN = kwargs.get("ball_down_length", "2,5mm")
            MFG_BODY_DIAM = kwargs.get("body_diameter", "2,5mm")
            # --->
            __tkm = __toolDoc.asPPRDokuman.kaynaklar.item(17)
            _rslt = self.ekle(__tkm)
            __toolDoc.kapat()
            __tkmPrm = _rslt.parametreler.altParametreler(
                _rslt.asType("Reference", IReferans), True)
            __tkmPrm["Name>>>"].degeriStr = MFG_NAME
            __tkmPrm["Comment>>>"].degeriStr = MFG_COMMENT
            __tkmPrm["Tool number>>>"].degeriStr = MFG_TOOL_NUMBER
            __tkmPrm["Nominal diameter>>>"].degeriStr = MFG_NOMINAL_DIAM
            __tkmPrm["Overall length>>>"].degeriStr = MFG_OVERALL_LGTH
            __tkmPrm["Length>>>"].degeriStr = MFG_LENGTH
            __tkmPrm["Ball down length>>>"].degeriStr = MFG_BALL_LENGTH_DOWN
            __tkmPrm["Body diameter>>>"].degeriStr = MFG_BODY_DIAM
            # --->
            return _rslt
        elif takim_tipi == TakimTurIsimleri.Silindir_Takim:
            MFG_NAME = kwargs.get("name")
            MFG_COMMENT = kwargs.get("comment", "")
            MFG_TOOL_NUMBER = kwargs.get("tool_number", "1")
            # --->
            MFG_NOMINAL_DIAM = kwargs.get("nominal_diameter", "4mm")
            MFG_OVERALL_LGTH = kwargs.get("overall_length", "20mm")
            MFG_LENGTH = kwargs.get("length", "10mm")
            MFG_CYLINDER_LENGTH = kwargs.get("cylinder_length", "10mm")
            MFG_BODY_DIAM = kwargs.get("body_diameter", "2mm")
            MFG_CORNER_RAD = kwargs.get("corner_radius", "2mm")
            # --->
            __tkm = __toolDoc.asPPRDokuman.kaynaklar.item(18)
            _rslt = self.ekle(__tkm)
            __toolDoc.kapat()
            __tkmPrm = _rslt.parametreler.altParametreler(
                _rslt.asType("Reference", IReferans), True)
            __tkmPrm["Name>>>"].degeriStr = MFG_NAME
            __tkmPrm["Comment>>>"].degeriStr = MFG_COMMENT
            __tkmPrm["Tool number>>>"].degeriStr = MFG_TOOL_NUMBER
            __tkmPrm["Nominal diameter>>>"].degeriStr = MFG_NOMINAL_DIAM
            __tkmPrm["Overall length>>>"].degeriStr = MFG_OVERALL_LGTH
            __tkmPrm["Length>>>"].degeriStr = MFG_LENGTH
            __tkmPrm["Cylinder length>>>"].degeriStr = MFG_CYLINDER_LENGTH
            __tkmPrm["Body diameter>>>"].degeriStr = MFG_BODY_DIAM
            __tkmPrm["Corner radius>>>"].degeriStr = MFG_CORNER_RAD
            # --->
            return _rslt
        else:
            pass

    def tutucuEkle(self, *args, **kwargs):
        pass

    def dosyadanTakimlariEkle(self, dosya: str = None, *args, **kwargs):
        if dosya:
            toolDoc = self.anaProgram.dokumanlar.ac(
                dosya
            )
        else:
            toolDoc = self.anaProgram.dokumanlar.ac(
                join(
                    dirname(abspath(
                        inspect.getfile(inspect.currentframe()))),
                    "fikoProcess.fikprcs",
                )
            )
        #--->
        kaynaklar = toolDoc.asPPRDokuman.kaynaklar

        isimler=[]
        for i in range(self.sayisi):
            isimler.append(self.item(i).parametreler["Name"].degeriStr)
        
        for i in range(kaynaklar.sayisi):
            takimKaynak = kaynaklar.item(i)
            if not takimKaynak.parametreler["Name"].degeriStr in isimler:
                self.ekle(takimKaynak)
        toolDoc.kapat()

    def __call__(self):
        PrdctSayisi = self.sayisi
        return [self.item(x) for x in range(PrdctSayisi)]

    def __str__(self):
        PrdctSayisi = self.sayisi
        return repr([self.item(x).ismi for x in range(PrdctSayisi)])
