import os, sys, send2trash

blacklist = [
        # files
        'clean.py',
        'main.py',
        'LICENSE.md',
        'screenshot.png',
        'README.md',
        '.git',
        # folders
        '.gitignore',
        'resources'
]

def run(recycle=True, print_ignores=False):
    """Main driver function for recycling unneeded files from the folder.
    
    Keyword Arguments:
        recycle {bool} -- True to recycle and send to recycle bin instead of permanently delete a file. (default: {True})
        print_ignores {bool} -- True to print what files have been ignored (default: {False})
    """

    # ternary raise support function, shouldn't ever be raised normally
    def raiseMe(filePath):
        raise('Invalid file or folder ; \'{}\''.format(filePath))

    # Constants
    basepath = sys.path[0]
    _logFiles = []
    _logFolders = []
    getName = lambda someList : 'folder' if someList is _logFolders else 'file' if someList is _logFiles else '???'

    print('Deletion sequence started')
    for file in os.listdir(basepath):
        filepath = os.path.join(basepath, file)
        # Take action on the offending file
        if file not in blacklist:
            # Send to recycle bin vs straightup permanently delete
            curType = _logFiles if os.path.isfile(filepath) else _logFolders if os.path.isdir(filepath) else raiseMe(filepath)
            # We want to recycle the file
            if recycle:
                send2trash.send2trash(filepath)
                curType.append('Recycled {}: \'{}\''.format(getName(curType), filepath))
            # We want to permanently delete the file
            else:
                os.remove(filepath)
                curType.append('Deleted {}: \'{}\''.format(getName(curType), filepath))
        else:
            if print_ignores:
                curType.append('Ignored {}: \'{}\''.format(getName(curType), filepath))
    
    # Clean up
    ending = '\n' if (_logFiles or _logFolders) else ''
    print('\n'.join(_logFiles), end=ending)
    print('\n'.join(_logFolders), end=ending)    
    print(f'Finished deleting {len(_logFiles)} files and {len(_logFolders)} folders.')

if __name__ == "__main__":
    run()