#!/usr/bin/env python3
import os
import subprocess

def sizeinbytes(size, unit):
    mag = {'KiB' : 1, 'MiB': 2, 'GiB' : 3}
    return float(size) * (1000 ** mag[unit])

# Run czkawka_cli on the current directory
cwd = os.getcwd()
print("Running czkawa for directory ", cwd, "...", sep="")
czkawka = ["czkawka_cli", "image", "-d", cwd]
czkawkadata = subprocess.run(czkawka, stdout=subprocess.PIPE)
czkawkadata = czkawkadata.stdout.decode('utf-8').splitlines() # Convert to a normal string and split into lines
if not czkawkadata:
    print("All images in", cwd, "are unique. Exiting...")
    exit()

# Get number of images total and remove first line since it would cause issues
numimages = int(czkawkadata[0].split()[1])
print ("Done!", numimages, "duplicate images found...")
czkawkadata.pop(0)

# Split czkawkadata by the delimeter used by czkawka_cli
czkawkadata = [i.split(' - ') for i in czkawkadata]

# Make keep store the images we want to keep
largest = 0
i = 0
dups = 0
keep = [None] * numimages
for image in czkawkadata:
    if not image[0]:
        largest = 0
        i += 1
        continue
    dups += 1
    size = image[2].split()
    size = sizeinbytes(size[0], size[1]) # Convert to bytes so we can easily compate kb vs mb vs gb
    if size > largest:
        largest = size
        keep[i] = image

# Remove all empty entries from czkawkadata
czkawkadata[:] = [x for x in czkawkadata if x[0]]

# Remove any images we're keeping from czkawkadata to be left with only the duplicates
for image in keep:
    czkawkadata.remove(image)

# User actions
confirmation = None
message = "Are you sure you want to delete all " + str(dups - len(keep)) + " duplicate images? (Yes/No/Show) "
while not confirmation:
    confirmation = input(message)
    if (confirmation == "yes"):
        for image in czkawkadata:
            os.remove(image[0])
            print("Removed image", image[0])
    elif (confirmation == "no"):
        exit()
    elif (confirmation == "show"):
        for image in czkawkadata:
            print(image)
            confirmation = None # Prompt again
    else:
        confirmation = None