import autopy
import math
import time
import random
import os
import shutil
import time
import win32gui
import win32con
import win32api


KEY_SAVE = 83
KEY_RANDOM = 82
KEY_LIGHT = 76


def sample_one_person(n, num_x=5, num_y=5):
    save_path = 'D:/UnityEyes_Windows/imgs'
    if os.path.exists(save_path) == False:
        os.mkdir(save_path)

    # reset
    win32gui.SendMessage(handle, win32con.WM_ACTIVATE, win32con.WA_ACTIVE, 0)
    center_x = (clt_left + clt_right) // 2
    center_y = (clt_top + clt_bottom) // 2
    win32api.SetCursorPos([center_x, center_y])

    # press 'L'
    win32api.keybd_event(KEY_LIGHT, 0, 0, 0)  # key down
    time.sleep(1)
    win32api.keybd_event(KEY_LIGHT, 0, win32con.KEYEVENTF_KEYUP, 0)  # key up
    # press 'R'
    win32api.keybd_event(KEY_RANDOM, 0, 0, 0)  # key down
    time.sleep(1)
    win32api.keybd_event(KEY_RANDOM, 0, win32con.KEYEVENTF_KEYUP, 0)  # key up

    # number of points for vertical and horizontal
    # num_x, num_y = 5, 5

    step_x, step_y = width // (num_x + 1), height // (num_y + 1)
    for i in range(1, num_y+1):
        for j in range(1, num_x+1):
            x = clt_left + j * step_x
            y = clt_top + i * step_y
            print('{},{}'.format(x, y))
            win32api.mouse_event(win32con.MOUSEEVENTF_MIDDLEDOWN, 0, 0, 0, 0)
            win32api.SetCursorPos([x, y])
            win32api.mouse_event(win32con.MOUSEEVENTF_MIDDLEUP, 0, 0, 0, 0)
            time.sleep(0.5)
            win32api.keybd_event(KEY_SAVE, 0, 0, 0) # key down
            win32api.keybd_event(KEY_SAVE, 0, win32con.KEYEVENTF_KEYUP, 0)  # key up


if __name__ == '__main__':
    width, height = 640, 480
    handle = win32gui.FindWindow('UnityWndClass', None)
    win_left, win_top, win_right, win_bottom = win32gui.GetWindowRect(handle)
    win_left += 2
    title_height = win_bottom - win_top - height
    clt_left, clt_top, clt_right, clt_bottom = win_left, win_top + title_height, win_right, win_bottom

    window_text = win32gui.GetWindowText(handle)
    class_name = win32gui.GetClassName(handle)
    print("handle: {:x}, {:d}".format(handle, handle))
    print('position: {},{},{},{}'.format(clt_left, clt_top, clt_right, clt_bottom))
    print('width:{}, height:{}'.format(clt_right - clt_left, clt_bottom - clt_top))
    print('class name: {}'.format(win32gui.GetClassName(handle)))

    win32gui.SendMessage(handle, win32con.WM_ACTIVATE, win32con.WA_ACTIVE, 0)

    for n in range(21, 31):
        print('person id: {}'.format(n))
        sample_one_person(n, 20, 15)
        time.sleep(1)
        os.rename('D:/UnityEyes_Windows/imgs', 'D:/UnityEyes_Windows/{:04d}'.format(n))
        shutil.move('D:/UnityEyes_Windows/{:04d}'.format(n), 'D:/UnityEyes_Windows/all')
        time.sleep(1)