#!/usr/bin/python
# -*- coding:utf-8 -*-
# surcouche a pygame :
# initialisation et fonctions necessaires au prog principal et aux objets

import pygame
import string
from pygame.locals import *
from para import *
import level

###############################################
# initialisations de la fenetre et des images #
###############################################

# initialisation de la fenetre
pygame.init()
screen = pygame.display.set_mode((SCREEN_SIZE[0],BANDEAU_HAUTEUR+SCREEN_SIZE[1]), 0, 32)
pygame.mouse.set_visible(False)
# definir une police de caracteres
pygame.font.init()
# attention : police non trouvee -> police par defaut
default_font = pygame.font.SysFont("Penguin Attack", 30)  # ("/etc/fonts/conf.avail/60-latin.conf", 30) 
pygame.display.set_caption(title)
# definition de surfaces pour l'affichage de l'etat du joueur
bandeau_etat = pygame.Rect((0, 0), (LARGEUR_BANDEAU_ETAT, BANDEAU_HAUTEUR))
bandeau_etat = screen.subsurface(bandeau_etat)

# images
background_image = pygame.image.load(background_image_filename).convert_alpha()
wall_image = pygame.image.load(wall_image_filename).convert_alpha()
food_simple_image = pygame.image.load(food_simple_image_filename).convert_alpha()
food_double_image = pygame.image.load(food_double_image_filename).convert_alpha()
food_triple_image = pygame.image.load(food_triple_image_filename).convert_alpha()
food_rotten_image = pygame.image.load(food_rotten_image_filename).convert_alpha()
food_heart_image = pygame.image.load(food_heart_image_filename).convert_alpha()
food_egg_image = pygame.image.load(food_egg_image_filename).convert_alpha()

snake_NS_image = pygame.image.load(snake_NS_filename).convert_alpha()
snake_EW_image = pygame.image.load(snake_EW_filename).convert_alpha()
snake_NE_image = pygame.image.load(snake_NE_filename).convert_alpha()
snake_SE_image = pygame.image.load(snake_SE_filename).convert_alpha()
snake_SW_image = pygame.image.load(snake_SW_filename).convert_alpha()
snake_NW_image = pygame.image.load(snake_NW_filename).convert_alpha()
snake_tete_N_image = pygame.image.load(snake_tete_N_filename).convert_alpha()
snake_tete_E_image = pygame.image.load(snake_tete_E_filename).convert_alpha()
snake_tete_S_image = pygame.image.load(snake_tete_S_filename).convert_alpha()
snake_tete_W_image = pygame.image.load(snake_tete_W_filename).convert_alpha()
snake_queue_N_image = pygame.image.load(snake_queue_N_filename).convert_alpha()
snake_queue_E_image = pygame.image.load(snake_queue_E_filename).convert_alpha()
snake_queue_S_image = pygame.image.load(snake_queue_S_filename).convert_alpha()
snake_queue_W_image = pygame.image.load(snake_queue_W_filename).convert_alpha()
snake_explosion = pygame.image.load(snake_explosion_filename).convert_alpha()

# fonction interne
def _coord_to_pos(coord):
    pos_x = coord[0] * GRID_SQUARE_SIZE[0]
    pos_y = coord[1] * GRID_SQUARE_SIZE[1] + BANDEAU_HAUTEUR
    return (pos_x, pos_y)

##############################################################
# fonctions graphiques utilisees dans le programme principal #
##############################################################

def wait():
    pygame.time.wait(level.current_level.DELAY)

def inputs():
    pause = quit = False
    direc_liste = []
    for event in pygame.event.get():
        if event.type == QUIT:
            quit = True
        if event.type == KEYDOWN:
            if event.key == K_UP:
                direc_liste.append("N")
            elif event.key == K_DOWN:
                direc_liste.append("S")
            elif event.key == K_RIGHT:
                direc_liste.append("E")
            elif event.key == K_LEFT:
                direc_liste.append("W")
            elif event.key == K_p or event.key == K_PAUSE:
                pause = not pause
    return direc_liste, pause, quit

def _just_display(text_lines):
    screen.fill((0,0,0))
    hauteur_stricte = 0
    for text in text_lines :
        label = default_font.render(text, True, (255,255,255))
        text_size = default_font.size(text)
        hauteur_stricte += text_size[1]
        screen.blit(label, (MSG_BOX_MARGE[0], MSG_BOX_MARGE[1]+hauteur_stricte))
    pygame.display.update()
    
def output_box_display(text_lines):
    _just_display(text_lines)
    while True:
        pygame.time.wait(300)
        # attendre que l'utilisateur quitte
        for event in pygame.event.get():
            if event.type == QUIT:
                return "quit"
            if event.type == KEYDOWN:
                if event.key == K_ESCAPE:
                    return "quit"
                elif event.key == K_RETURN:
                    return None

def input_box_display(output_text_lines, input_size):
    _just_display(output_text_lines)
    input_text = ""
    while True:
        pygame.time.wait(300)
        # traiter les entrees ou attendre que l'utilisateur quitte
        for event in pygame.event.get():
            if event.type == QUIT:
                return "quit"
            if event.type == KEYDOWN:
                if event.key == K_ESCAPE:
                    return "quit"
                elif event.key == K_RETURN:
                    return input_text
                elif event.key == K_BACKSPACE:
                    input_text = input_text[:-1]
                elif pygame.key.name(event.key) in string.letters+string.digits :
                    if len(input_text) < input_size:
                        input_text += pygame.key.name(event.key)
                _just_display(output_text_lines + [input_text])
               
def pause():
    while True:
        pygame.time.wait(300)
        for event in pygame.event.get():
            if event.type == QUIT:
                return "quit"
            if event.type == KEYDOWN:
                if event.key == K_p or event.key == K_PAUSE:
                    return None

def display_update():
    pygame.display.update()

def display_background():
    screen.blit(background_image, (0,BANDEAU_HAUTEUR))

###############################################################
# fonctions graphiques utilisees dans les methodes des objets #
###############################################################

def display_square(image, coord):
    pos = _coord_to_pos(coord)
    screen.blit(image, pos)

def display_player_status(energy, points, life):
        # effacer le contenu du bandeau haut
        bandeau_etat.fill((0,0,0))

        # afficher l'energie
        energy_ratio = float(energy)/level.current_level.PLAYER_ENERGY_MAX
        bandeau_etat_energie = pygame.Rect((0,0), (energy_ratio*LARGEUR_ENERGY, BANDEAU_HAUTEUR))
        pygame.draw.rect(bandeau_etat, (255,0,0), bandeau_etat_energie)

        # afficher les points
        label = default_font.render(str(points), True, (255,255,255))
        points_size = default_font.size(str(points))
        coin = (LARGEUR_BANDEAU_ETAT-POINTS_LARGE, 0)
        bandeau_etat.blit(label, (coin[0]+(POINTS_LARGE-points_size[0])/2, (BANDEAU_HAUTEUR-points_size[1])/2))

        # afficher les vies
        for i in range(life):
            coin = (LARGEUR_BANDEAU_ETAT-POINTS_LARGE-LIFE_INTERVAL*(i+1), 0)
            bandeau_etat.blit(food_egg_image, coin)
