import pygame
from random import choice
from domino import Domino
from time import time
import settings as s
from screens import Hand_screen, Game_screen, Button

from pygame.locals import (
    K_ESCAPE,
    KEYDOWN,
    QUIT,
    MOUSEBUTTONDOWN,
    MOUSEBUTTONUP
)

pygame.init()
SCREEN_WIDTH = s.SCREEN_WIDTH
SCREEN_HEIGHT = s.SCREEN_HEIGHT
DOMINO_W = s.DOMINO_W
DOMINO_H = s.DOMINO_H
# screen = pygame.display.set_mode((0,0),pygame.FULLSCREEN)
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

all_sprites = pygame.sprite.Group()
dominos = pygame.sprite.Group()
group_hand_screen = pygame.sprite.Group()
group_game_screen = pygame.sprite.Group()

game_screen = Game_screen()
all_sprites.add(game_screen)
group_game_screen.add(game_screen)

hand_screen = Hand_screen()
group_hand_screen.add(hand_screen)
all_sprites.add(hand_screen)

get_button = Button()
group_hand_screen.add(get_button)
all_sprites.add(get_button)

x = 100
y = SCREEN_HEIGHT - DOMINO_H / 2 - 25

# print(len(all_sprites))

for i in range(6):
    values = choice(s.DOMINOS)
    domino = Domino(x, y, values, i)
    s.DOMINOS.remove(values)
    x += DOMINO_W + 10

    dominos.add(domino)
    group_hand_screen.add(domino)
    all_sprites.add(domino)

pygame.display.flip()
run = True

mouse_down = False

mouse_old_pos = [pygame.mouse.get_pos()[0], pygame.mouse.get_pos()[1]]
r_click_cd = 0.2
r_click_time = 0
while run:

    for event in pygame.event.get():
        # Did the user hit a key?
        if event.type == KEYDOWN:
            # Was it the Escape key? If so, stop the loop.
            if event.key == K_ESCAPE:
                run = False


        elif event.type == MOUSEBUTTONDOWN:
            if event.button == 1:
                mouse_down = "left"
            elif event.button == 3:
                mouse_down = "right"

        elif event.type == MOUSEBUTTONUP:
            mouse_down = False

        # Did the user click the window close button? If so, stop the loop.
        elif event.type == QUIT:
            run = False

    if mouse_down:
        move = False

        mouse_new_pos = pygame.mouse.get_pos()[0], pygame.mouse.get_pos()[1]
        mouse_move = [mouse_old_pos[0] - mouse_new_pos[0], mouse_old_pos[1] - mouse_new_pos[1]]

        for domino in group_hand_screen:
            if domino.type == "domino":
                domino.update_color(pygame.mouse.get_pos()[0], pygame.mouse.get_pos()[1])

                if mouse_down == "left":
                    move = domino.update_pos(move, mouse_move[0], mouse_move[1], mouse_new_pos[0], mouse_new_pos[1],
                                             hand_screen, group_hand_screen, game_screen, dominos)

                elif mouse_down == "right" and time() - r_click_time >= r_click_cd:
                    r_click_time = domino.update_rotation(mouse_new_pos[0], mouse_new_pos[1], r_click_time)

        if not move and mouse_down == "left":
            values = False
            if time() - r_click_time >= r_click_cd and len(dominos) != 0:
                r_click_time, values, coor = get_button.active_button(mouse_new_pos[0], mouse_new_pos[1], r_click_time, dominos)
            if values:
                domino_new = Domino(coor[0], coor[1], values, len(dominos) - 1)
                dominos.add(domino_new)
                group_hand_screen.add(domino_new)
            else:
                game_screen.update_pos(mouse_move[0], mouse_move[1], mouse_new_pos[0], mouse_new_pos[1])

    else:
        for domino in group_hand_screen:
            if domino.type == "domino":
                domino.update_color(pygame.mouse.get_pos()[0], pygame.mouse.get_pos()[1])
                domino.update_type_pos(hand_screen, group_hand_screen, game_screen, dominos)

    screen.fill((230, 230, 230))

    def blit_group(group):
        for entity in group:
            if entity.type == "domino":
                entity.blit_domino(screen, dominos)
            elif entity.type == "button":
                entity.blit_button(screen)

            else:
                screen.blit(entity.surf, entity.rect)

    # blit_group(group_game_screen)
    game_screen.blit_g_screen(screen, dominos)
    blit_group(group_hand_screen)


    mouse_old_pos = [pygame.mouse.get_pos()[0], pygame.mouse.get_pos()[1]]

    pygame.display.flip()