import os
import pyautogui
import time
import win32clipboard as cb

# prepare GUI on first word
print('minimize me in 5 seconds')
time.sleep(5)

# prepare Points
p1 = (8, 85)
p2 = (1545, 861)
p3_pre = (1496, 771)
p3 = (1570, 839)
p4 = (153, 60)

# prepare dir
word_htmls_dir_name = "./word_htmls"
os.makedirs(word_htmls_dir_name + './bytes', exist_ok=True)
os.makedirs(word_htmls_dir_name + './str', exist_ok=True)


# prepare clipboard
predefined_formats = {
   1: 'CF_TEXT',
   2: 'CF_BITMAP',
   3: 'CF_METAFILEPICT',
   4: 'CF_SYLK',
   5: 'CF_DIF',
   6: 'CF_TIFF',
   7: 'CF_OEMTEXT',
   8: 'CF_DIB',
   9: 'CF_PALETTE',
  10: 'CF_PENDATA',
  11: 'CF_RIFF',
  12: 'CF_WAVE',
  13: 'CF_UNICODETEXT',
  14: 'CF_ENHMETAFILE',
  15: 'CF_HDROP',
  16: 'CF_LOCALE',
  17: 'CF_DIBV5',
}

def perform_actions(p1, p2, p3, p4):
    word_file_id = 0
    while True:
        word_file_id += 1
        # top left point(start to select all text)
        pyautogui.mouseDown(p1)
        # beyond bottom right point(end to select all text)
        pyautogui.moveTo(p2)
        ## wait selecting all long text
        time.sleep(1)
        # to select last line(if not, last line may be lost)
        pyautogui.moveTo(p3_pre)
        # bottom right point
        pyautogui.moveTo(p3)
        pyautogui.mouseUp()
        # copy selected data
        pyautogui.hotkey('ctrl', 'c')
        # save copied data from clipboard
        cb.OpenClipboard()
        format = 0
        while True:
            format = cb.EnumClipboardFormats(format)
            if format == 0:
                break
            if format in predefined_formats:
                name = predefined_formats[format]
            else:
                name = cb.GetClipboardFormatName(format)
            if name == '':
                name = '(unknown)'
            word_html = cb.GetClipboardData(format)
            if isinstance(word_html, bytes):
                word_file_name = word_htmls_dir_name + '/bytes/' + str(word_file_id).zfill(8) + '_' + str(format) + '.' + name
                with open(word_file_name, 'wb') as f:
                    f.write(word_html)
            else:
                if isinstance(word_html, str):
                    word_file_name = word_htmls_dir_name + '/str/' + str(word_file_id).zfill(8) + '_' + str(format) + '.' + name
                    with open(word_file_name, 'w', encoding='utf-8') as f:
                        f.write(word_html)
                else:
                    print(type(word_html))
        cb.CloseClipboard()  
        # turn to next word
        pyautogui.click(p4)
        time.sleep(0.5)

perform_actions(p1, p2, p3, p4)