#! /usr/bin/env python
# -*- coding: utf-8 -*-

import messagehandler
import websocketserver

import mysql.connector
import config

#HACK
map_id = 1

class Game:
    def __init__(self):
        self.messageHandler = messagehandler.MessageHandler(self)
        self.server = websocketserver.WebSocketServer(self.messageHandler)

        self.bdd = mysql.connector.connect(**config.infosBdd())
        self.cursor = self.bdd.cursor()
        self.bdd.disconnect()

    def start(self):
        self.server.start()
        
    def move(self, idUnite, x, y):
        """
        Cette méthode déplace une unité identifié par son id vers la case de coordonnée x, y
        en modifiant les informations dans la BDD
        """
        self.bdd.connect(**config.infosBdd ())
        self.cursor.execute("""SELECT id, unit_id
                               FROM `case`
                               WHERE map_id=%s AND x=%s AND y=%s""" % (map_id, x, y))

        try:
            caseArrivee = self.cursor.fetchmany()[0]
        except (IndexError) as e:
            print("Erreur : la case de coordonnée (%s, %s) n'est pas présente dans la BDD" % (str(x), str(y)))
            self.bdd.disconnect()
            return False

        
        if not caseArrivee[1] :
            try:
                #Déplacement de l'unité dans la BDD
                self.cursor.execute("UPDATE `case` SET unit_id=NULL WHERE unit_id=%s" % str(idUnite))
                self.cursor.execute("UPDATE `case` SET unit_id=%s WHERE id=%s" % (str(idUnite), str(caseArrivee[0])))
                self.cursor.execute("UPDATE unit SET case_id=%s WHERE id=%s"% (str(caseArrivee[0]), str(idUnite)))
                self.bdd.disconnect()
                return True
            
            except (mysql.connector.errors.InterfaceError, TypeError) as e:
                print("Erreur lors du déplacement de l'unité dans la BDD.")
                self.bdd.disconnect()
                raise


