# Author: Duality/Robert
# Email: robertvdtuuk@gmail.com

# Software to track score in a game of Star Realms

# by default the right buttons increment/decrement  1
# holding the select button (on the left side of the badge) and then using the right buttons increment/decrement 5

# reseting the score can be done by pressing all three buttons at once or!
# just double clicking the Bottom left Button

# Score is reset back to 50


import display
import buttons
import utime

class Button(object):
	def __init__(self, buttonmask,
				 longPressInterval = 3000,
				 doubleClickInterval=300):
		self.buttonmask = buttonmask
		self.previousState = False
		self.state = 0
		self.pressedState = False
		self.releasedState = False

		self.longPressStart = 0
		self.longPressEnd = 0
		self.longPressInterval = longPressInterval
		self.longPressState = False
		self.longPressedState = False

		self.previousDoubleClickTime = 0
		self.doubleClickInterval = doubleClickInterval
		self.doubleClickState = False

	def checkButton(self):
		state = buttons.read(self.buttonmask)

		# get the current button state from the hardware
		if (state & self.buttonmask) == self.buttonmask:
			self.pressedState = True
		else:
			self.pressedState = False

		# the button is released but previously was pressed.
		if self.pressedState == False and self.previousState == True:
			self.releasedState = True

		# the button is pressed  but previously wasn't pressed.
		if self.pressedState == True and self.previousState == False:
			self.longPressEnd = utime.time_ms() + self.longPressInterval
			self.longPressState = True
			self.longPressedState = False

			if utime.time_ms() - self.previousDoubleClickTime < self.doubleClickInterval:
				self.doubleClickState = True
			self.previousDoubleClickTime = utime.time_ms()

		if self.longPressState == True:
			if(utime.time_ms() - self.longPressEnd >= self.longPressInterval):
				self.longPressState = False
				self.longPressedState = True

		self.previousState = self.pressedState

	def pressed(self):
		return self.pressedState

	def released(self):
		releasedState = self.releasedState
		self.releasedState = 0
		return releasedState

	def longPressed(self):
		longpressed = self.longPressedState
		self.longPressedState = False
		return longpressed

	def doubleClicked(self):
		doubleClickState = self.doubleClickState
		self.doubleClickState = False
		return doubleClickState

def main():
	incButton = Button(buttons.TOP_RIGHT)
	decButton = Button(buttons.BOTTOM_RIGHT)
	selectButton = Button(buttons.BOTTOM_LEFT)

	posy = 30
	score = 50

	disp = display.open()
	while True:
		selectButton.checkButton()
		incButton.checkButton()
		decButton.checkButton()

		if selectButton.pressed():
			if incButton.released():
				score += 5
			elif decButton.released():
				score -= 5
		elif incButton.released():
			score += 1
		elif decButton.released():
			score -= 1

		if(selectButton.pressed() and incButton.pressed() and decButton.pressed()):
			score = 50
			utime.sleep(1)

		if score <= 0:
			pass

		if selectButton.longPressed():
			print("select button was long pressed.")

		if selectButton.doubleClicked():
			print("select button was double clicked.")
			score = 50

		disp.clear()
		disp.print(str(score), posx=80 - round(len(str(score)) / 2 * 14), posy=posy)
		disp.update()

main()