class RobotClient(Thread):
    def __init__(self, robot, adresseIP):
        Thread.__init__(self)
        self.robot = robot
        self.adresseIP = adresseIP
        self.termineeAEteEnvoyerAStation = True
        self.demarrageTermine = False
        self.monClient = TCPClient(self.adresseIP)

    def run(self):
        self.monClient._connectToServer()
        while not self.demarrageTermine:
            time.sleep(0.5)
            print("Attends demarrage...")
        self.envoyerPretAStation()
        data = self.attendreCommande()
        self.traiterCommande(data)
        while 1:
            if self.robot.pretEnvoyerLettre:
                self.envoyerLettre()
                time.sleep(2)
                self.envoyerIndice()
                time.sleep(4)
                self.robot.pretEnvoyerLettre = False

            elif (self.robot.tresorCapturer):
                self.envoyerCaptureTresor()
                time.sleep(0.2)
                self.robot.tresorCapturer = False
                data = self.attendreCommande()
                self.traiterCommande(data)

            elif (self.robot.tresorNonCapturer):
                self.envoyerTresorAbsent()
                time.sleep(0.2)
                self.robot.tresorNonCapturer = False
                data = self.attendreCommande()
                self.traiterCommande(data)

            elif self.robot.commandeTerminee and not self.robot.alignementEnCours:
                    self.envoyerTension()
                    time.sleep(0.2)
                    self.envoyerCommandeTerminee()
                    time.sleep(0.2)
                    data = self.attendreCommande()
                    self.traiterCommande(data)
            else:
                self.envoyerTension()
                time.sleep(0.2)

    def attendreCommande(self):
        data = -1
        while 1:
            try:
                data = self.monClient.receiveFile()
                break
            except Exception as e:
                print e
                print "Connection perdue... Tente de reconnecter..."
                time.sleep(0.1)
                self.monClient = TCPClient(self.adresseIP)
                self.monClient._connectToServer()
        if data == -1:
            print("Erreur lors de la lecture du fichier")

        self.termineeAEteEnvoyerAStation = False
        return data

    def traiterCommande(self, data):
        print data
        commande = data['commande']
        parametre = data['parametre']
        self.robot.traiterCommande(commande, parametre)
        self.termineeAEteEnvoyerAStation = False

    def envoyerTension(self):
        RequeteJSON("tension", self.robot.tensionCondensateur)
        while 1:
            try:
                self.monClient.sendFile()
                break
            except Exception as e:
                print e
                print "Connection perdue... Tente de reconnecter..."
                time.sleep(0.1)
                self.monClient = TCPClient(self.adresseIP)
                self.monClient._connectToServer()

    def envoyerLettre(self):
        RequeteJSON("man " + self.robot.lettreObtenue, 0)
        while 1:
            try:
                self.monClient.sendFile()
                self.robot.pretEnvoyerLettre = False
                break
            except Exception as e:
                print e
                print "Connection perdue... Tente de reconnecter..."
                time.sleep(0.1)
                self.monClient = TCPClient(self.adresseIP)
                self.monClient._connectToServer()

    def envoyerIndice(self):
        RequeteJSON("indice " + self.robot.indiceObtenu, 0)
        while 1:
            try:
                self.monClient.sendFile()
                break
            except Exception as e:
                print e
                print "Connection perdue... Tente de reconnecter..."
                time.sleep(0.1)
                self.monClient = TCPClient(self.adresseIP)
                self.monClient._connectToServer()

    def envoyerCaptureTresor(self):
        RequeteJSON("present", 0)
        while 1:
            try:
                self.monClient.sendFile()
                break
            except Exception as e:
                print e
                print "Connection perdue... Tente de reconnecter..."
                time.sleep(0.1)
                self.monClient = TCPClient(self.adresseIP)
                self.monClient._connectToServer()

        self.robot.commandeTerminee = False
        self.termineeAEteEnvoyerAStation = True

    def envoyerTresorAbsent(self):
        RequeteJSON("absent", 0)
        while 1:
            try:
                self.monClient.sendFile()
                break
            except Exception as e:
                print e
                print "Connection perdue... Tente de reconnecter..."
                time.sleep(0.1)
                self.monClient = TCPClient(self.adresseIP)
                self.monClient._connectToServer()

        self.robot.commandeTerminee = False
        self.termineeAEteEnvoyerAStation = True

    def envoyerCommandeTerminee(self):
        RequeteJSON("termine", 0)
        while 1:
            try:
                self.monClient.sendFile()
                break
            except Exception as e:
                print e
                print "Connection perdue... Tente de reconnecter..."
                time.sleep(0.1)
                self.monClient = TCPClient(self.adresseIP)
                self.monClient._connectToServer()
        self.robot.commandeTerminee = False
        self.termineeAEteEnvoyerAStation = True

    def envoyerPretAStation(self):
        RequeteJSON("robotPret", 0)
        while 1:
            try:
                self.monClient.sendFile()
                break
            except Exception as e:
                print e
                print "Connection perdue... Tente de reconnecter..."
                time.sleep(0.1)
                self.monClient = TCPClient(self.adresseIP)
                self.monClient._connectToServer()
            time.sleep(0.1)