﻿# -*- coding: utf-8 -*-
"""
Created on Sun Jan 19 01:47:31 2014

@author: Bilgisayar
"""
import inspect
from math import atan2, sqrt
import numpy
import subprocess

import psutil
import sys
import os
from win32com import client
from win32com.client import Dispatch

sys.path.append(os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()) + "\\..\\..\\..")))

from IFikatia import IFikatia
import time
from win32gui import *


kokDizin = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()) + "\\..\\..\\.."))


def timeit(method):
    def timed(*args, **kw):
        ts = time.time()
        result = method(*args, **kw)
        te = time.time()

        print('%r (%r, %r) %2.4f sec' % (method.__name__, args, kw, te - ts))
        return result

    return timed


@timeit
def deneme():
    selam = IFikatia(client.Dispatch("Catia.Application"))
    prgler = selam.aktifDokuman.asProcessDokuman.partOperasyonlari[0].programlar()
    for prg in prgler:
        print(prg.ismi, prg.aciliAktiviteVarMi)

#
# def programCalistir(Parametreler, PencereGoster=0):
#     """ Herhangi Bir Programi Parametre İle Çalistirip Bitmesini BekleMEZ """
#     info = subprocess.STARTUPINFO()
#     info.dwFlags = 11
#     info.wShowWindow = PencereGoster
#     asd = subprocess.Popen(Parametreler, startupinfo=info,shell=True)
#
#     proc = psutil.Process(asd.pid)
#     asd.communicate()
#     # proc.set_nice(psutil.REALTIME_PRIORITY_CLASS)
#     return proc


def aptClickPost(fikatia):  # M3xProgramWorkbench #ManufacturingProgramWorkbench
    def pencereBekle(pencere: str):
        def pencereListesi():
            def callback(hwnd, strings):
                if IsWindowVisible(hwnd):
                    window_title = GetWindowText(hwnd)
                    left, top, right, bottom = GetWindowRect(hwnd)
                    if window_title and right - left and bottom - top:
                        strings.append(window_title)
                return True

            win_list = []  # list of strings containing win handles and window titles
            EnumWindows(callback, win_list)  # populate list

            return win_list

        # --->
        while not pencere in pencereListesi():
            time.sleep(0.05)

    # --->

    # fikatia = IFikatia(Dispatch("Catia.Application"))
    fikatia.hsoSenkronize = True
    # fikatia.aktifDokuman.asProcessDokuman.partOperasyonlari[0].makine.postTuru = "APT"

    fikatia.aktifEt()

    shell = Dispatch("WScript.Shell")

    programlar = fikatia.aktifDokuman.asProcessDokuman.seciliProgramlar
    if not fikatia.isAlaniId in ["M3xProgramWorkbench", "ManufacturingProgramWorkbench"]:
        fikatia.aktifDokuman.asProcessDokuman.secililer.temizle()
        fikatia.aktifDokuman.asProcessDokuman.secililer.ekle(
            fikatia.aktifDokuman.asProcessDokuman.partOperasyonlari[0].catNesne)
        fikatia.tusYolla("c:FrmActivate{ENTER}")

    fikatia.aktifDokuman.secililer.temizle()
    for prg in programlar:
        fikatia.aktifDokuman.secililer.ekle(prg)
        time.sleep(0.1)
        fikatia.komut("generate nc code interactively")
        time.sleep(0.1)
        pencereBekle("Generate NC Output Interactively")
        time.sleep(0.1)
        fikatia.tusYolla("{TAB}")
        #fikatia.tusYolla("{TAB}")
        time.sleep(0.1)
        fikatia.tusYolla("{TAB}")
        fikatia.tusYolla("{TAB}")
        time.sleep(0.1)
        fikatia.tusYolla("{TAB}")
        fikatia.tusYolla("{TAB}")
        time.sleep(0.1)
        fikatia.tusYolla("{TAB}")
        fikatia.tusYolla("{ENTER}")
        pencereBekle("Manufacturing Information")
        time.sleep(0.1)
        fikatia.tusYolla("{ENTER}")
        time.sleep(0.1)
        fikatia.aktifEt()
        fikatia.tusYolla("{ESC}")
        fikatia.tusYolla("{ESC}")
        fikatia.tusYolla("{ESC}")
        fikatia.tusYolla("{ESC}")
        fikatia.aktifDokuman.secililer.temizle()
        time.sleep(0.1)
        print(prg.ismi)

    for prg in programlar:
        fikatia.aktifDokuman.secililer.ekle(prg)


if __name__ == '__main__':
    fikatia = IFikatia(Dispatch("Catia.Application"))
    # fikatia.aktifDokuman.asProcessDokuman.partOperasyonlari[0].makine.postTuru = "APT"
    # print(fikatia.aktifDokuman.asProcessDokuman.partOperasyonlari[0].makine.postTuru)
    aptClickPost(fikatia)
    behemilPrg = os.path.join(kokDizin, "Projeler", "QTBilesenleri", "FikoBehemilPost", "__test.py")

    klasor = fikatia.aktifDokuman.klasoru
    fikatia.aktifDokuman.klasoruAcSecimli()
    # os.system(behemilPrg + " '" + klasor+"'")
    # programCalistir(behemilPrg + " " + klasor + "", True)
    subprocess.call(['python', behemilPrg, ""])#, "'{}'".format(klasor)
