import PySimpleGUI as sg
import os
import base64

'''
    Base64 Encoder - encodes a folder of PNG files and creates a .py file with definitions
'''

OUTPUT_FILENAME = 'output.py'

def main():
    # folder = r'C:\Python\PycharmProjects\GooeyGUI\Uno Cards'
    folder=''
    folder = sg.PopupGetFolder('Source folder for images\nImages will be encoded and results saved to %s'%OUTPUT_FILENAME,
                               title='Base64 Encoder',
                               default_path=folder, initial_folder=folder )

    if folder is None or folder == '':
        sg.PopupCancel('Cancelled - No valid folder entered')
        return
    try:
        namesonly = [f for f in os.listdir(folder) if f.endswith('.png') or f.endswith('.ico') or f.endswith('.gif')]
    except:
        sg.PopupCancel('Cancelled - No valid folder entered')
        return

    outfile = open(os.path.join(folder, OUTPUT_FILENAME), 'w')

    for i, file in enumerate(namesonly):
        contents = open(os.path.join(folder, file), 'rb').read()
        encoded = base64.b64encode(contents)
        outfile.write('\n{} = {}\n\n'.format(file[:file.index(".")], encoded))
        sg.OneLineProgressMeter('Base64 Encoding', i+1, len(namesonly),key='_METER_')

    outfile.close()
    sg.Popup('Completed!', 'Encoded %s files'%(i+1))


if __name__ == '__main__':
    main()