import inspect
from os.path import join, abspath, dirname
from win32com.client import Dispatch

from IFikatia import IFikatia

# tabloTumProgramlar.ListRows(1).Range(1) = 100

# Catiadan Programlar Aktarılıyor
Fikatia = IFikatia(Dispatch("Catia.Application"))
processDokuman = Fikatia.aktifDokuman.asProcessDokuman
programlar = processDokuman.seciliProgramlar

tumJson = []
for i, prg in enumerate(programlar):
    prgjson = { }
    prgjson["ismi"] = prg.ismi
    prgjson["aktif"] = prg.aktif
    prgjson["açıklama"] = "" if prg.aciklama == "No Description" else prg.aciklama
    if prg.aktiviteler.sayisi > 0:
        _aktivite = prg.aktiviteler[1]
        _tav20Er32 = _aktivite.acilar.tav20Er32
        #--->
        # AÇIKLAMA Açılar Alınıyor
        _acilar = "Ü=" + "{:1.3f}".format(_tav20Er32.ustAci) + " A=" + \
                 "{:1.3f}".format(_tav20Er32.altAci)
        prgjson["açılar"] = _acilar
        # AÇIKLAMA Kaçma Değerleri
        _kacma = dict(X=0.000, Y=0.000, Z=0.000)
        _kacma = _tav20Er32.kacmaDegerleri.kacmaDegerleri
        prgjson["kaçmaDeğerleri"] = "X:{:1.3f}".format(_kacma["X"]) + " " + "Y:{:1.3f}".format(_kacma["Y"]) + \
                                    " Z:{:1.3f}".format(_kacma["Z"])
        # AÇIKLAMA Açısal Offset Alınıyor
        _acisalOffset = prg.aktiviteler[1].fikoAcilar.acisalOffset.degerleriAl(0.1)
        prgjson["açısalOffset"] = "X:{:1.3f}".format(_acisalOffset.X) + " " + "Y:{:1.3f}".format(_acisalOffset.Y) + \
                                  " Z:{:1.3f}".format(_acisalOffset.Z)
        # AÇIKLAMA Takım Alınıyor
        prgjson["takım"] = prg.takimlar2
        # AÇIKLAMA En Büyük Takım Boyu
        _takimBoyu = prg.enBuyukTakimBoyu
        if _takimBoyu:
            prgjson["takımBoyu"] = "{:1.3f} mm".format(_takimBoyu)
        # AÇIKLAMA En Yüksek İlerleme
        prgjson["ilerleme"] = prg.enYuksekIlerleme
        # AÇIKLAMA En Yüksek Hatve
        _hatve = prg.enYuksekHatve
        prgjson["hatve"] = "{:1.3f} mm".format(_hatve) if _hatve else None
        # AÇIKLAMA En Yüksek Devir
        prgjson["devir"] = prg.enYuksekDevir
        # AÇIKLAMA En Yüksek İşleme Süresi
        prgjson["islemeSuresi"] = prg.toplamIslemeSuresi
        # AÇIKLAMA Magazinli
        prgjson["magazinli"] = prg.magazinli
        # AÇIKLAMA Operasyon Boyutları 2d/3d/5d
        prgjson["operasyonBoyutları"] = str(prg.operasyonBoyutlari)
        # AÇIKLAMA Çevre Offset 2d için
        _cevreOffset = prg.enDusukCevreOffset
        prgjson["cevreOffset"] = "{:1.3f} mm".format(_cevreOffset) if _cevreOffset != None else None
        # AÇIKLAMA Yüzey Offset 2d için
        _yuzeyOffset = prg.enDusukYuzeyOffset
        prgjson["yuzeyOffset"] = "{:1.3f} mm".format(_yuzeyOffset) if _yuzeyOffset != None else None
        # AÇIKLAMA Hesaplatılmış mı?
        prgjson["hesaplatilmamis"] = prg.hesaplatilmamisVarMi
        # AÇIKLAMA Hata Kodları
        prgjson["hataKodları"] = prg.hataKodlari
        print(i, prg.ismi)

    # BİLGİ Listeye Ekleniyor
    tumJson.append(prgjson)

# excele Programlar Aktarılıyor

ScriptYolu = dirname(abspath(inspect.getfile(inspect.currentframe())))
excel = Dispatch('Excel.Application')
excel.visible = True
wb = excel.Workbooks.Open(join(ScriptYolu, "sablonlar", "sablon1.xlsx"))
syfProgramlar = wb.Sheets("Programlar")

tabloTumProgramlar = syfProgramlar.ListObjects("TabloTumProgramlar")

for i, json in enumerate(tumJson):
    tabloTumProgramlar.ListColumns("Program Adı").range(i + 2).Value = json["ismi"]
    tabloTumProgramlar.ListColumns("Program Açıklama").range(i + 2).Value = json["açıklama"]
    tabloTumProgramlar.ListColumns("Aktif").range(i + 2).Value = json["aktif"]
    tabloTumProgramlar.ListColumns("Açılar").range(i + 2).Value = json["açılar"] if "açılar" in json.keys() else None
    tabloTumProgramlar.ListColumns("Kaçma Değerleri").range(i + 2).Value = json[
        "kaçmaDeğerleri"] if "kaçmaDeğerleri" in json.keys() else None
    tabloTumProgramlar.ListColumns("Açısal Offset").range(i + 2).Value = json[
        "açısalOffset"] if "açısalOffset" in json.keys() else None
    tabloTumProgramlar.ListColumns("Takım").range(i + 2).Value = json[
        "takım"] if "takım" in json.keys() else None
    tabloTumProgramlar.ListColumns("Takım Boy").range(i + 2).Value = json[
        "takımBoyu"] if "takımBoyu" in json.keys() else ""
    tabloTumProgramlar.ListColumns("İşleme İlerlemesi").range(i + 2).Value = json[
        "ilerleme"] if "ilerleme" in json.keys() else None
    tabloTumProgramlar.ListColumns("Hatve").range(i + 2).Value = json[
        "hatve"] if "hatve" in json.keys() else None
    tabloTumProgramlar.ListColumns("Devir").range(i + 2).Value = json[
        "devir"] if "devir" in json.keys() else None
    tabloTumProgramlar.ListColumns("İşleme Süresi").range(i + 2).Value = json[
                                                                             "islemeSuresi"] / 60 if "islemeSuresi" in json.keys() else None
    tabloTumProgramlar.ListColumns("Magazinli").range(i + 2).Value = json[
        "magazinli"] if "magazinli" in json.keys() else None
    tabloTumProgramlar.ListColumns("Operasyon Boyutları").range(i + 2).Value = json[
        "operasyonBoyutları"] if "operasyonBoyutları" in json.keys() else None
    tabloTumProgramlar.ListColumns("Çevre Offset").range(i + 2).Value = json[
        "cevreOffset"] if "cevreOffset" in json.keys() else None
    tabloTumProgramlar.ListColumns("Yüzey Offset").range(i + 2).Value = json[
        "yuzeyOffset"] if "yuzeyOffset" in json.keys() else None
    tabloTumProgramlar.ListColumns("Hesaplatılmamış").range(i + 2).Value = json[
        "hesaplatilmamis"] if "hesaplatilmamis" in json.keys() else None
    tabloTumProgramlar.ListColumns("Bilgi Kodu").range(i + 2).Value = json[
        "hataKodları"] if "hataKodları" in json.keys() else None
