from random import randint, choice
from constantes import *
from configuracion import TEXTO_OBJETIVO, TEXTO_ADVERTENCIA, TEXTO_NORMAL

def aparecer_monticulos(cantidad):
    monticulos = set()
    
    for i in range(cantidad):
        x, y = randint(100, 700), randint(100, 400)
        
        while (x, y) in monticulos:
            x, y = randint(100, 700), randint(100, 400)
        
        monticulos.add((x, y))
    
    return monticulos
    
def establecer_objetivos(objetivo, tipos_insectos):
    peligro = objetivo
    
    while (objetivo == peligro):
        objetivo = choice(tipos_insectos)
        
    return objetivo, peligro

def inicializar_insectos(tipos_insectos, n_insectos):
    
    insectos = []
    for i in range(n_insectos):
        tipo = choice(tipos_insectos)
        insecto = (tipo, (randint(0, 800), randint(0, 500)))
        insectos.append(insecto)
    
    return insectos

def mover_insectos(insectos, delta_t, velocidad):
    for i in range(len(insectos)):
        tipo, (x, y) = insectos[i]
        x_t = x + randint(-1, 1) * delta_t * velocidad
        y_t = y + randint(-1, 1) * delta_t * velocidad
        
        if 0 <= x_t <= 800 and 0 <= y_t <= 500:
            x, y = x_t, y_t
        
        insectos[i] = (tipo, (x, y))
        
def dibujar_insectos(ventana, insectos, imagenes_insectos):
    for insecto in insectos:
        x, y = insecto[1]
        ventana.blit(imagenes_insectos[insecto[0]], (x - 25, y - 25))

def dibujar_monticulos(ventana, monticulos, imagen_monticulo):
    w, h = imagen_monticulo.get_size()
    for x, y in monticulos:
        ventana.blit(imagen_monticulo, (x - w / 2, y - w / 2))

def dibujar_resultados(resultados, estadisticas, tipos_insectos, bloque_resultados, fuente, alto, puntaje, tiempo):
    cabeceras = ("Tipo", TEXTO_OBJETIVO[0:3], TEXTO_ADVERTENCIA[0:3], TEXTO_NORMAL[0:3])
    texto_cabecera = fuente.render("{0[0]:^5} {0[1]:>3} {0[2]:>3} {0[3]:>3}".format(cabeceras), True, AMARILLO)
    bloque_resultados.blit(texto_cabecera, (0, 0))
    i = 1
    for tipo in tipos_insectos:
        if tipo == estadisticas["mayor"]:
            obs = "max"
            color = VERDE
        elif tipo == estadisticas["menor"]:
            obs = "min"
            color = ROJO
        else:
            obs = ''
            color = BLANCO
            
        texto_cantidades = fuente.render("{0:^5} {1[0]:>3} {1[1]:>3} {1[2]:>3} {2:>3}".format(tipo, resultados[tipo], obs), True, color)
        bloque_resultados.blit(texto_cantidades, (0, i * alto))
        i += 1
    
    texto_puntaje = fuente.render("Puntaje: {0}".format(puntaje), True, BLANCO)
    texto_acierto = fuente.render("Porcentaje de acierto: {0}%".format(estadisticas["acierto"]), True, BLANCO)
    texto_categoria = fuente.render("Categoria: {0}".format(estadisticas["categoria"]), True, BLANCO)
    texto_tiempo_restante = fuente.render("Tiempo de juego: {0:02}:{1:02}".format(tiempo / 60, tiempo % 60), True, BLANCO)
    
    i+=1
    bloque_resultados.blit(texto_puntaje, (0, i * alto))
    bloque_resultados.blit(texto_tiempo_restante, (0, (i + 1) * alto))
    bloque_resultados.blit(texto_acierto, (0, (i + 2) * alto))
    bloque_resultados.blit(texto_categoria, (0, (i + 3) * alto))
