# -*- coding: utf-8 -*-
__projet__ = "Chenille animée"
__nom_fichier__ = "course"
__author__ = "AJ Tinet"
__date__ = "février 2026"


# Import des classes et bibliothèques utiles
from turtle import *
from chenille import *
from chenilleprocessionnaire import *
from random import randint


# =============================================================================

# Définition de la classe Course
class Course:
    """
    Course de chenilles.
    """
    
    def __init__(self, lchenilles):
        """
        Constructeur de la classe course. Une course est constituée d'une liste
        de coureurs (i.e. (chenille, vitesse))
        ----------------------------------------------------------------------
        :param lchenilles: Liste des chenilles engagées dans la course
        :type lchenilles: Liste d'instances de la classe Chenille ou de ses sous-classes

        """
        
        # Placement par ligne, on laisse une ligne vide en haut et en bas
        nblignes = len(lchenilles)+2
        height = window_height() 
        
        # La liste des coureurs contient des doublets (chenille, vitesse)
        self.coureurs_ = []
        i = 0
        
        # Création des coureurs
        for c in lchenilles:
            
            # On met la chenille sur la bonne ligne
            ligne = -height//2 + (i+1)*window_height()//(nblignes -1)
            
            for a in c.anneaux_:
                a.deplace(0, ligne)
                
            # On sélectionne la vitesse
            vitesse = randint(1,5)
            
            self.coureurs_.append([c, vitesse])
            i += 1  
            
            
    def premier(self):
        """
        Indique la chenille placée en 1ere position et l'abscisse du centre de sa tête.
        En cas d'égalité, la premère chenille de la liste est considérée gagnante.
        ----------------------------------------------------------------------
        :return: chenille, position tête
        :rtype: Instance de CHENILLE ou sous-classes, INT

        """
        xtete = []
        
        # Liste des positions de la tête de chaque chenille
        for c, v in self.coureurs_:
            
            xtete.append(c.anneaux_[-1].centre_.getx())
            
        # Calcul du max
        xmax = max(xtete)
        imax = xtete.index(xmax)
        
        return self.coureurs_[imax][0], xmax
            
    
    def courir(self):
        """
        Gère la course. La course s'arrête quand une chenille a atteint le bord
        de la fenêtre.
        ----------------------------------------------------------------------
        :return: Chenille gagnante
        :rtype: Instance de CHENILLE ou sous-classes

        """
        # Etat initial
        for c, v in self.coureurs_:
            c.dessiner()
        
        # Boucle de temps
        while True:
            
            # Teste si une chenille a gagné
            cmax, xmax = self.premier()
            if xmax >= window_width()//2:
                
                return cmax
            
            # On avance pour un pas de temps
            for c, v in self.coureurs_:
                
                c.effacer()
                
                # Gestion de la vitesse
                for i in range(v):
                    
                    c.deplace()
                    
                c.dessiner()
                
        return cmax
                    
                    
# =============================================================================
        
# Programme principal : Test de la classe Course 
if __name__ == "__main__":
    
    bleue = Chenille(4, 10, "blue", "black")
    rouge = ChenilleProcessionnaire(8, 7, 'red', 'black')        
    verte = Chenille(5, 8, 'green', 'black')

    championnat = Course([bleue, rouge, verte])

    vainqueur = championnat.courir()  
    
    print(vainqueur.anneaux_[0].coul_)
    exitonclick()