import pygame
import main					#able to load the lib
main.init()					#
import data, color, spr_type				#then load the libs
from color import white
from color import grey

def init():
	global box_pile0_img
	global box_pile1_img
	global box_pile2_img
	global box_pile3_img
	global box_pile4_img
	global box_img
	global box_pile_rect
	global box_rect
	box_pile0_img = data.load_img('BOX_PILE.png')
	box_pile1_img = data.load_img('BOX_REBUILD.png')
	box_pile2_img = data.load_img('BOX_ON.png')
	box_pile3_img = data.load_img('BOX_FULL.png')
	box_pile4_img = data.load_img('BOX_CLOSED.png')
	box_img = data.load_img('BOX_DELIVERY.png')
	box_pile_rect = box_pile0_img.get_rect()
	box_rect = box_img.get_rect()
	box_pile0_img.convert()
	box_pile1_img.convert()
	box_pile2_img.convert()
	box_pile3_img.convert()
	box_pile4_img.convert()
	box_img.convert()
	box_pile0_img.set_colorkey(white)
	box_pile1_img.set_colorkey(white)
	box_pile2_img.set_colorkey(white)
	box_pile3_img.set_colorkey(white)
	box_pile4_img.set_colorkey(white)
	box_img.set_colorkey(white)


class box_pile(pygame.sprite.Sprite):
	def __init__(self):
		pygame.sprite.Sprite.__init__(self)
		self.image, self.rect = box_pile0_img, box_pile_rect
		self.rect.center = (480,420)
		self.spr = None
		self.wait = 0
		self.box = None

	def update(self):
		if self.spr != None and self.spr != False :
			if self.wait == 0:
				self.wait = 10
				if self.image == box_pile3_img:
					self.image = box_pile0_img
					self.spr = False
				elif self.image == box_pile2_img:
					self.image = box_pile3_img
					self.spr.kill()
					self.spr = True
				elif self.image == box_pile1_img:
					self.image = box_pile2_img
				elif self.image == box_pile0_img:
					self.image = box_pile1_img

			else:
				self.wait -= 1

	def draw(self,screen):
		screen.blit(self.image, self.rect)

	def pack(self,spr):
		if self.spr != False:
			self.spr = spr

	def free(self):
		self.spr = None

class box_deliver(pygame.sprite.Sprite):
	def __init__(self):
		pygame.sprite.Sprite.__init__(self)
		self.spr_type = spr_type.type_box
		self.image, self.rect = box_img, box_img.get_rect()
		self.rect.center = (480,420)

	def update(self):
		pass

	def draw(self,screen):
		screen.blit(self.image, self.rect)
		

if __name__=="__main__":
	#tester
	pygame.init()					#first
	screen = pygame.display.set_mode((640,480))	#the screen
	clock = pygame.time.Clock()			#the time

	#accelerator
	exit_button = pygame.QUIT
	pygame.event.set_blocked(None)
	pygame.event.set_allowed(exit_button)
	happen = pygame.event.peek
	fps = clock.tick
	flip = pygame.display.flip
	cls = screen.fill
	white = color.white

	#box
	init()
	pile = box_pile()

	#spring
	import spring
	import random
	spring.init()
	springs = pygame.sprite.Group()
	for i in range(20):
		springs.add(spring.spring(random.randint(80,540),random.randint(80,400),grey))

	#cube
	import grapping_cube
	grapping_cube.init()
	boxes = pygame.sprite.Group()
	cube = grapping_cube.grappling_cube()
	taken = None

	#main loop
	end = False
	raize = False
	button = False
	while not end:
		fps(40)
		flip()
		cls(white)
		if happen(exit_button):
			end = True
		else:
			pygame.event.clear()
		if True in pygame.mouse.get_pressed():
			if not button:
				raize = True
				button = True
			else:
				raize = False
		else:
			raize = False
			button = False
		#test box
		pile.update()
		pile.draw(screen)

		boxes.update()
		boxes.draw(screen)

		#test spring
		springs.update()
		springs.draw(screen)

		#test cube
		if raize :
			(x,y) = pygame.mouse.get_pos()
			if not taken and not cube.spr:
				if pile.box != None and pile.box.rect.collidepoint(x,y):
					cube.take(pile.box)
					taken = pile.box
					pile.refold()
				else:
					for sp in springs:
						if sp.rect.collidepoint(x,y):
							cube.take(sp)
							taken = sp
			elif taken and cube.destx == 0 and cube.desty == 0:
				if pile.rect.collidepoint(x,y):
					cube.go((pile.rect.centerx,pile.rect.top+10))
					taken = None
				else:
					cube.go((x,y))
					taken = None
		cube.update()
		cube.draw(screen)

		for sp in pygame.sprite.spritecollide(pile,springs,0):
			if pile.spr == None and pile.image == box_pile2_img and taken == None:
				pile.pack(sp)
		if pile.box:
			if pile.box not in boxes:
				boxes.add(pile.box)
			
