
import os.path
import math
import time
import io
import sys
from PIL import Image, ImageDraw, ImageFont, ImageColor

print("")
print("")
print("Copyright (C) 2023  Samuel \"Reki\" Piper")
print("")
print("This code is free software; you can redistribute it and/or modify")
print("it under the terms of the GNU GPL (General Public License); either")
print("version 2 of the License, or (at your option) any later version.")
print("")
print("")

print("====================================================================================================")
print("|                                                                                                  |")
print("|    &@@@@@@  @@@@@@@, @@@@@@@@@@@@@@@@@  @@@@@@  @@@* @@@@  @@@@@@@@@@@% @@@@@@@@@@@@@@@@@@@@@@   |")
print("|    &@@@@@@@@@@@@@@@,      #@@@@   @@@@  @@@@@@  @@@* %@@@  @@@@                      #@@@@       |")
print("|    &@@@  @@@@  @@@@. @@@@ *@@@@   @@@@  @@@@@@@@@@@* %@@@  @@@@   @@@@% @@@@@  @@@@@ #@@@@       |")
print("|    &@@@  @@@@  @@@@  @@@@  @@@@   @@@@  @@@@@@@@@@@* @@@@  @@@@   ,@@@% @@@@@%%@@@@@ #@@@@       |")
print("|    %@@@  @@@@  @@@@  @@@@  @@@@@@@@@@@  @@@& @@@@@@* #@@@  @@@@@@@@@@@% @@@@@@@@@@@@ (@@@.       |")
print("|    *///  //./  ////  ////  ///(////.     /// #@#((@. ((&@  /@ /&(@@%@%  //%@/  //#/% ,/.  *@@@   |")
print("|                                                                                        (@@@@@@   |")
print("|    @@@@@@@@@@@@@@@@@@@@@  #@@@@@@@     @@@@@@@@   @@@@@@@      @@@@@@@   @@@@@@@@@@@@@@@@@@@@@   |")
print("|    &@@@@@@@@@@@@@@@@@@@@  #@@@@@@@     @@@@@@@@   @@@@@@@@     @@@@@@@   @@@@@@@@@@@@@@@@@@@@/   |")
print("|    &@@@@@@@@@@@@@@@@@@@@  #@@@@@@@     @@@@@@@@   @@@@@@@@@&   @@@@@@@   @@@@@@@@@@@@@@@@@@@@@   |")
print("|    &@@@@@@*               #@@@@@@@    *@@@@@@@@   @@@@@@@@@@@@@@@@@@@@        @@@@@@@(           |")
print("|    &@@@@@@*  /@@@@@@@@@@  #@@@@@@@   %@@@@@@@@@   @@@@@@@@@@@@@@@@@@@@          *@@@@@@#         |")
print("|    &@@@@@@*     @@@@@@@@  #@@@@@@@ #@@@@@@@@@@@   @@@@@@@.@@@@@@@@@@@@            @@@@@@@@@      |")
print("|    &@@@@@@@@@@@@@@@@@@@@  #@@@@@@@@@@@@@@@@@@@@   @@@@@@@   /@@@@@@@@@   @@@@@@@@@@@@@@@@@@@@,   |")
print("|    &@@@@@@@@@@@@@@@@@@@@  #@@@@@@@@@@@@@@@@@@@@   @@@@@@@     %@@@@@@@   @@@@@@@@@@@@@@@@@@@@(   |")
print("|    @@@@@@@@@@@@@@@@@@@@@  #@@@@@@@@@@@@@@@@@@@@   @@@@@@@      @@@@@@@   @@@@@@@@@@@@@@@@@@@@    |")
print("|                                                                                                  |")
print("====================================================================================================")

time.sleep(0.3)

print("\n\n")


while(True):
	image_path = input("Image path relative to CWD: ")
	if (os.path.isfile(image_path) == True):
		break
	print("invalid path... try again\n")

img = Image.open(image_path)
img_rgb = img.convert('RGB')
color_index = 0
color_array = []

for x in range(img_rgb.size[0]):
	for y in range(img_rgb.size[1]):
		col = img_rgb.getpixel((x, y))
		if (col in color_array):
			continue
		color_array.append(col)
		color_index += 1
	
for c in color_array:
	print(c)

original_indicies = len(color_array)
color_indicies = int(math.pow(2, math.ceil(math.log(original_indicies)/math.log(2))))
print(str(color_indicies) + " unique colors")
print("\ngenerating indices...")

for i in range(original_indicies, color_indicies):
	color_array.append((0, 0, 0))

greyscale_array = [0]*color_indicies
for i in range(0, color_indicies):
	val = int((i + 0.5) * (255.0 / color_indicies))
	greyscale_array[i] = (val, val, val)



diffuse = Image.new(mode="RGB", size=img.size)
palfile = Image.new(mode="RGB", size=(color_indicies, color_indicies))


for x in range(diffuse.size[0]):
	for y in range(diffuse.size[1]):
		col = img_rgb.getpixel((x, y))
		diffuse.putpixel((x, y), greyscale_array[color_array.index(col)])
diffuse.save("output_diffuse.png")
print("diffuse saved")

for c in range(0, color_indicies):
	for x in range(palfile.size[0]):
		palfile.putpixel((x, c), color_array[c])
palfile.save("output_pal.png")
