#!/usr/bin/env python3

global cpt
global EmuMod

FirstRun = 1
cpt = 0
import configparser
from collections import Counter
from tkinter import *
from tkinter import ttk
from PIL import Image, ImageTk
import PIL.Image
import PIL.ImageTk
import sys
from modules.arrow import *
from modules.emulateur_display import *
import time
import os
#sys.path.append( './modules/')
#from arrow import *


#EmuMod :
# 	0 : Emu select
# 	1 : Rom select

EmuMod = 0


#def EmuMod():

def BackgroundRom(Emu):
	BgFile = "./data/emu/media/" + str(Emu) +"_bg.png"
	BgFile = IsImgExist(BgFile,"bg")
	BgEmu = PhotoImage(file = BgFile)
	LabelBgEmu = Label(arkadeus,image=BgEmu)
	LabelBgEmu.BgEmu = BgEmu
	Cnv.create_image( 0, 0, image = BgEmu, anchor = "nw")


def IsImgExist(AbsPathFile,TypeMedia):
	if not os.path.exists(AbsPathFile):
		match TypeMedia:
			case "emu":
				return "./media/noemu.png"
			case "bg":
				return "./media/nobg.png"
	else:
		return AbsPathFile
			
			


def BackgroundEmu():

	BackgroundEmu = Media["background"]
	BgEmu = PhotoImage(file = Background)
	LabelBgEmu = Label(arkadeus,image=BgEmu)
	LabelBgEmu.BgEmu = BgEmu
	Cnv.create_image( 0, 0, image = BgEmu, anchor = "nw")

def EnterEmu(GetEmuMod):
	global EmuMod
	global cpt
	EmuMod=1
	runMcpt = cpt + 1
	if runMcpt > EmuCpt:
		runMcpt = 0
	print("Emu : " + str(res[runMcpt]))
	#Cnv.delete("all")
	BackgroundRom(str(res[runMcpt]))
	
#def ParseEmu():


def ViewEmu(cL,xL,yL,cM,xM,yM,cR,xR,yR):
	NfL="./data/emu/media/" + res[cL] + ".png"
	NfL = IsImgExist(NfL,"emu")
	NfM="./data/emu/media/" + res[cM] + ".png"
	NfM = IsImgExist(NfM,"emu")
	NfR="./data/emu/media/" + res[cR] + ".png"
	NfR = IsImgExist(NfR,"emu")

	PNfL = PhotoImage(file = NfL)
	LabelPNfL = Label(arkadeus, image=PNfL)
	LabelPNfL.PNfL = PNfL

	PNfM = PhotoImage(file = NfM)
	LabelPNfM = Label(arkadeus, image=PNfM)
	LabelPNfM.PNfM = PNfM

	PNfR = PhotoImage(file = NfR)
	LabelPNfR = Label(arkadeus, image=PNfR)
	LabelPNfR.PNfR = PNfR

	Cnv.pack(fill = "both", expand = True)
	for IdCanvas in Cnv.find_all():
		if IdCanvas != 1:
			Cnv.delete(IdCanvas)

	Cnv.create_image(xL, yL, image=PNfL)
	Cnv.create_image(xM, yM, image=PNfM)
	Cnv.create_image(xR, yR, image=PNfR)
	print("Curent Emu : " + str(res[cM]))

def leftKey(GetEmuMod):
	if GetEmuMod == 0:
		global cpt
		cpt =  cpt - 1
		if cpt < 0:
			cpt = EmuCpt
		Lcpt = cpt
		Mcpt = cpt + 1
		Rcpt = cpt + 2
		if Mcpt > EmuCpt:
			Mcpt = 0
			Rcpt = 1
		if Rcpt > EmuCpt:
			Rcpt = 0
		print("DEBUG : " + str(EmuMod) + " Emu : " + str(cpt))
		ViewEmu(Lcpt,LeftSquareX, LeftSquareY,Mcpt,MiddleSquareX, MiddleSquareY,Rcpt,RightSquareX, RightSquareY)

def rightKey(GetEmuMod):

	if GetEmuMod == 0:
		global cpt
		cpt = cpt + 1
		if cpt > EmuCpt:
			cpt = 0
		Lcpt = cpt
		Mcpt = cpt + 1
		Rcpt = cpt + 2
		if Mcpt > EmuCpt:
			Mcpt = 0
			Rcpt = 1
		if Rcpt > EmuCpt:
			Rcpt = 0
		print("DEBUG : " + str(EmuMod) + " Emu : " + str(cpt))
		ViewEmu(Lcpt,LeftSquareX, LeftSquareY,Mcpt,MiddleSquareX, MiddleSquareY,Rcpt,RightSquareX, RightSquareY)

def Escape(GetEmuMod):
	if GetEmuMod == 0:
		print("Ciao !!")
		arkadeus.quit()
	if GetEmuMod == 1:
		#Cnv.delete("all")
		global EmuMod
		global cpt
		cpt = 0
		EmuMod = 0

		BackgroundEmu()
		ViewEmu(cpt,LeftSquareX, LeftSquareY,cpt+1,MiddleSquareX, MiddleSquareY,cpt+2,RightSquareX, RightSquareY)




arkadeus= Tk()

global res 
res = []

dir_path = r'./data/emu/bin/'

# Iterate directory
for path in os.listdir(dir_path):
	if os.path.isfile(os.path.join(dir_path, path)):
		FileName=os.path.splitext(path)[0]
		res.append(FileName)
		print("DEBUG : " + FileName)

cnt = Counter(res)
global EmuCpt
EmuCpt=len(cnt) - 1
print(" Nmbre emulateur : " + str(EmuCpt))


config_obj = configparser.ConfigParser()
config_obj.read("./conf/config.ini")
Media = config_obj["Media"]
ForceRes = Media["force_resolution"]
Background = Media["background"]
Square = int(Media["square_size"])

config_rom = configparser.ConfigParser()
config_rom.read("./conf/games.ini")

Emulateur = config_rom["emulateurs"]

print(Emulateur["EmulateurList"])
IdEmu(Emulateur["EmulateurList"])


arkadeus.attributes('-fullscreen', True)
arkadeus.title("Arkadeus")



if ForceRes == "y":
	Xsize = int(Media["x_resolution"])
	Ysize = int(Media["y_resolution"])
else:
	Xsize = arkadeus.winfo_screenwidth()
	Ysize = arkadeus.winfo_screenheight()


print("res : " + str(Xsize) + ":" + str(Ysize) )



MiddleSquareX=(Xsize/2)
MiddleSquareY=(Ysize/2)
MiddleSquareX2=MiddleSquareX + Square
MiddleSquareY2=MiddleSquareY + Square

LeftSquareX=(Xsize/3)
LeftSquareY=(Ysize/3)

LeftSquareX2=LeftSquareX + Square
LeftSquareY2=LeftSquareY + Square

RightSquareX=(Xsize*2/3)
RightSquareY=(Ysize/3)

RightSquareX2=RightSquareX + Square
RightSquareY2=RightSquareY + Square

Cnv = Canvas( arkadeus, width = Ysize , height = Xsize)
Cnv.pack(fill = "both", expand = True)

BackgroundEmu()
ViewEmu(cpt,LeftSquareX, LeftSquareY,cpt+1,MiddleSquareX, MiddleSquareY,cpt+2,RightSquareX, RightSquareY)


arkadeus.bind("<Left>", lambda event: leftKey(EmuMod))
arkadeus.bind("<Right>", lambda event: rightKey(EmuMod))
arkadeus.bind("<Return>", lambda event: EnterEmu(EmuMod))
arkadeus.bind('<Escape>',lambda event : Escape(EmuMod))

arkadeus.mainloop()
