import win32console as w32con
import win32con as w32c
import win32gui as w32g
import win32api as w32a
import pyautogui as pag

class console:
    def __init__(self):
        self._hwnd = w32con.GetConsoleWindow()
    @property
    def hwnd(self):
        return self._hwnd
    def focus(self):
        self.hide()
        self.show()
        w32g.BringWindowToTop(self.hwnd)
        w32g.ShowWindow(self.hwnd, w32c.SW_SHOWNORMAL)
        w32g.SetForegroundWindow(self.hwnd)
    def unfocus(self):
        pass
    def hide(self):
        w32g.ShowWindow(self.hwnd, w32c.SW_HIDE)
    def show(self):
        w32g.ShowWindow(self.hwnd, w32c.SW_SHOW)
    def move(self, x, y):
        w32g.SetWindowPos(self.hwnd, x, y, self.size[0], self.size[1])
    def resize(self, width, height):
        w32g.SetWindowPos(self.hwnd, self.position[0], self.position[1], width, height)
    def minimize(self):
        w32g.ShowWindow(hwnd, w32c.SW_MINIMIZE)
        return self.size
    def maximize(self):
        w32g.ShowWindow(hwnd, w32c.SW_MAXIMIZE)
        return self.size
    def title():
        def fget(self):
            return w32con.GetConsoleTitle()
        def fset(self, value):
            w32con.SetConsoleTitle(str(value))
        def fdel(self):
            pass
        return locals()
    title = property(**title())
    def center(self,x=w32a.GetSystemMetrics(0)/2,
                    y=w32a.GetSystemMetrics(1)/2):
        self.move(x-self.size[0]/2,y-self.size[1]/2)
    @property
    def visible(self):
        return w32g.IsWindowVisible(self.hwnd)
    @property
    def position(self):
        rect = w32g.GetWindowRect(self.hwnd)
        x = rect[0]+7
        y = rect[1]
        return (x, y)
    @property
    def size(self):
        rect = w32g.GetWindowRect(self.hwnd)
        w = rect[2] - self.position[0]-7
        h = rect[3] - self.position[1]-7
        return (w, h)
    def screenshot(self, path):
        rect = self.position+self.size
        self.focus()
        pag.screenshot(path, region=rect)
        return path
console = console()
