## @file Snake_2.o.py
#  @author Andy Hameed, Usman Irfan
#  @brief implements gameplay and connects the different components of the game
#  @date 11/09/2018

from random import randint
from Snake import *
from Food import *

#defining a list to update snanke's length
snake_loc = []
#variable to increment snake's length, initially it would be 1
snake_length = 1

speed = 70

# 0 gives (- direction)
# 1 gives (+ direction)
direction = 1
# 0 - x-axis , 1 - y-axis
axis = 0

score = 0

# parameters for initializing food on the screen
food_location = []
food_x = randint(0, grid_length - 1) * size
food_y = randint(0, grid_length - 1) * size
food_location = [food_x, food_y]

##initialize snake and draw snake body somewhere on the screen

snake = Snake(size, 0, 20, 1)
pygame.draw.rect(win, red , [x,y, size, size])
food = Food(size)


#Loop through the events as long as the game is running
run = True 
while run:
    
    #delay controls part of speed
    pygame.time.delay(speed) 

    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            run = False

        #Each event type has an integer assigned to it. KEYDOWN has the code 2
        if event.type == pygame.KEYDOWN:
            if (event.key == pygame.K_LEFT):
                # if snake is moving up or down, turn left, otherwise don't turn
                if (snake.axis): snake.direct = -1
                snake.axis = 0
            if (event.key == pygame.K_RIGHT):
                #if snake is moving up or down turn right, otherwise dont turn
                if (snake.axis): snake.direct = 1 
                snake.axis = 0
            if (event.key == pygame.K_UP):
                #if snake is moving left or right turn up, otherwise dont turn
                if (not snake.axis): snake.direct = -1 
                snake.axis = 1
            if (event.key == pygame.K_DOWN):
                #if snake is moving left or right turn down, otherwise dont turn
                if (not snake.axis): snake.direct = 1 
                snake.axis = 1

    #Snake moving depending on axis and direction
    if (snake.axis):
        y += (size)*snake.direct
    else:
        x += (size)*snake.direct
   
    #Boundary conditions for snake hitting window edge
    if (x < 0 or
        y < 0 or
        y > screenSize - size or
        x > screenSize - size):
        
        pygame.quit() #for now, quit the game when snake hits boundary

##        snake.die()

#---------------------FOR WRAPING SNAKE AROUND WINDOW---------------------
    
##    if x < 0:
##        #x = 0
##        x = screenSize - size
##    if y < 0:
##        #y = 0
##        y = screenSize - size
##    if y > screenSize - size:
##        #y = 500 - size
##        y = 0
##    if x > screenSize - size:
##        #x = 500 - size
##        x = 0

#-------------------------------------------------

    if(abs(x - food_location[0]) < 15 and abs(y - food_location[1]) < 15):
        score += 10

        #increment the length by 3 unit every time
        snake_length += 3

        
    win.fill(white)
    
    font = pygame.font.SysFont("times",30)
    text = font.render("Score = " + str(score),True,[0,0,0])
    win.blit(text,(0,0))
    
    if ([x,y] in snake_loc) and snake_length > 1:        
        pygame.time.delay(1000)
        pygame.quit() #quit for now, but should return to main menu
    
    snake_head = []
    snake_head.append(x)
    snake_head.append(y)

    snake_loc.append(snake_head)
    
    #function to print 
    #consumption of food block
    food.redraw_food(x, y, food_location, screenSize, snake_loc)

    snake_blocks = len(snake_loc)

    #Draw food item
    food.draw_food(food_location)

    
    if snake_blocks > snake_length:
        #keep updating the new block
        del snake_loc[0]
    '''
    Logic for updating the length is taken from:
    CodeWithHarry, CodeWithHarry. “Snakes Game: Length Increment Logic - Python Game Development Using Pygame In Hindi #17.”
    YouTube, YouTube, 2 Oct. 2018,
    www.youtube.com/watch?v=mkGJb0W03DM&index=17&list=PLu0W_9lII9ailUQcxEPZrWgDoL36BtPYb.
    '''
    
    #Draw snake
    snake.draw(snake_loc)
    #update display
    pygame.display.update()

pygame.quit()