#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pygame, sys, time


def main():
	pygame.init()
	screen = pygame.display.set_mode((600,800))
	font = pygame.font.SysFont(None, 24)
	clock = pygame.time.Clock()

	def _disptxt(s_arr):
		screen.fill((255,255,255))
		for i,s in enumerate(s_arr):
			screen.blit(font.render(s, True, (0,0,0)), (10, 10 + i*24))
		pygame.display.flip()

	pad_map = {
			pygame.K_UP: (-1,0,0),
			pygame.K_DOWN: (1,0,0),
			pygame.K_LEFT: (0,-1,0),
			pygame.K_RIGHT: (0,1,0),
			pygame.K_w: (0,0,1),
			pygame.K_s: (0,0,-1)
	}

	pygame.joystick.init()
	joystick_count = pygame.joystick.get_count()
	if joystick_count > 0:
		_disptxt(["Found %d joysticks." % joystick_count])
	else:
		_disptxt(["Found no joysticks.", "Exit..."])
		time.sleep(1)
		pygame.quit()
		return 1

	joystick = pygame.joystick.Joystick(0)
	joystick.init()
	axes = joystick.get_numaxes()
	buttons = joystick.get_numbuttons()
	hats = joystick.get_numhats()
	_disptxt([
		"Using joystick \"%s\"" % joystick.get_name(),
		"Number of axes: %d" % axes,
		"Number of buttons: %d" % buttons,
		"Number of hats: %d" % hats

	])


	running = True
	while running:
		b_msg = []
		ax_msg = []
		hat_msg = []
		for e in pygame.event.get():
			pressed = pygame.key.get_pressed()
			if e.type == pygame.QUIT or pressed[pygame.K_ESCAPE]:
				running = False

			# Possible joystick actions: JOYAXISMOTION JOYBALLMOTION JOYBUTTONDOWN JOYBUTTONUP JOYHATMOTION
			#if e.type == pygame.JOYBUTTONDOWN:
			#	b_msg.append("Joystick button pressed.")
			#if e.type == pygame.JOYBUTTONUP:
			#	b_msg.append("Joystick button released.")


		for i in range(axes):
			axis = joystick.get_axis(i)
			ax_msg.append("Axis %d value %.2f" % (i, axis))

		for i in range(buttons):
			button = joystick.get_button(i)
			b_msg.append("Button %d value %.2f" % (i, button))

		# Hat switch. All or nothing for direction, not like joysticks.
		# Value comes back in an array.
		for i in range(hats):
			hat = joystick.get_hat(i)
			hat_msg.append("Hat %d value %s" % (i, str(hat)))

		_disptxt(b_msg + hat_msg + ax_msg)
		clock.tick(60)

	pygame.quit()


if __name__ == '__main__':
	main()
