#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Dec  9 09:13:03 2021

@author: pjoulaud
"""
import doctest

class Noeud:
    def __init__(self, une_valeur=None, un_noeud=None):
        """
        >>> n1 = Noeud(7)
        """
        self.valeur = une_valeur
        self.noeud_suivant = un_noeud
    def __str__(self):
        return f"noeud:{self.valeur}"
    __repr__ = __str__
        
class File:
    def __init__(self, un_noeud = None):
        """
        >>> f = File()
        >>> n1 = Noeud(7)
        >>> f = File(n1)
        """
        assert isinstance(un_noeud, Noeud) or un_noeud==None
        self.noeud = un_noeud
    def __repr__(self):
        chaine = ""
        a_ajouter = self.noeud
        while a_ajouter :
            chaine = f"{a_ajouter}->" + chaine
            a_ajouter = a_ajouter.noeud_suivant
        chaine += "entete"
        return chaine

    def est_vide(self):
        """
        >>> f = File()
        >>> f.est_vide()
        True
        >>> f = File(Noeud(7))
        >>> f.est_vide()
        False
        """
        return self.noeud == None
    
    def ajout(self, un_noeud):
        """
        >>> f = File()
        >>> n1 = Noeud(7)
        >>> f.ajout(n1)
        >>> f.noeud == n1
        True
        """
        assert isinstance(un_noeud, Noeud)
        if self.est_vide():
            self.noeud = un_noeud
        else:
            n = self.noeud
            while n.noeud_suivant!=None :
                n = n.noeud_suivant
            n.noeud_suivant = un_noeud
    
    def retire(self) :
        """
        >>> f = File(Noeud(7))
        >>> n = f.retire()
        >>> n
        noeud:7
        >>> f.est_vide()
        True
        """
        if not self.est_vide():
            tete = self.noeud
            self.noeud = tete.noeud_suivant
            return tete
        else :
            return None    
        
    def premier(self) :
        """
        >>> f = File(Noeud(7))
        >>> n = f.premier()
        >>> n
        noeud:7
        >>> f.est_vide()
        False
        """
        if not self.est_vide():
            return self.noeud
        else :
            return None 

if __name__=='__main__':
    doctest.testmod()