import sqlite3

class Pokemon :
    def __init__(self, reponse):
        """
        reponse est de la forme :
        (id, nom, name, pv, attaque, defense, attaque_spe, def_spe, vitesse, id_evo_de, description)
        """
        self.id=reponse[0]
        self.name=reponse[1]
        self.nom=reponse[2]
        self.pv=reponse[3]
        self.attaque=reponse[4]
        self.defense=reponse[5]
        self.attaque_speciale=reponse[6]
        self.defense_speciale=reponse[7]
        self.vitesse=reponse[8]
        self.description=reponse[10]
        self.trouve_evolution_de(reponse[9])
    
    def trouve_evolution_de(self, numero_pokemon_evolution_de):
        if numero_pokemon_evolution_de!=None:
            # a completer pour obtenir le nom du Pokémon dont il est l'évolution
            self.evolution_de="---"
        else:
            self.evolution_de="---"

# ###########################################
#    Base données                           #
# ###########################################

# Création de la connexion
def creer_connection(db_fichier):
    """
    Crée une connection à une base de données spécifiée dans l'argument db_fichier
    :param db_fichier:
        chemin du fichier de la base de données sous la forme d'une chaine de caractères
    :return:
        objet de connection or None
    """
    connexion = None
    try:
        connexion = sqlite3.connect(db_fichier)
        return connexion
    except Error as e:
        print(e)
        return None

def obtenir_une_reponse(requete):
    """
    Renvoie la première réponse à la requête.
    """
    bdd = creer_connection("pokemon.db")
    curseur = bdd.cursor()
    curseur.execute(requete)
    reponse=curseur.fetchone()
    curseur.close()
    bdd.close()
    return reponse

def obtenir_toutes_les_reponses(requete):
    """
    Renvoie la liste des réponses à la requête.
    """
    bdd = creer_connection("pokemon.db")
    curseur = bdd.cursor()
    curseur.execute(requete)
    reponse=curseur.fetchall()
    curseur.close()
    bdd.close()
    return reponse

######################
#  Partie à remplir  #
######################

# fonction de recherche du nombre de Pokemons dans le pokedex
def nombre_pokemons():
    """
    renvoie le nombre de pokemons presents dans le pokedex
    return: int
    exemple:
         nombre_pokemons=893
    """
    requete = ""    # <--------- écrire la requête
    reponse = obtenir_une_reponse(requete)
    # rep = reponse[0]  #   <----------- à décommenter
    rep = 0      # <-------------- à enlever
    return rep

# fonction de recherche de la liste des pokemons disponibles
def recherche_pokemons():
    '''
    renvoie la liste des noms de pokemons de la base rangé par ordre alphabetique
    arguments:
        aucun
    return:
        list
    exemple
        return = ['Abo', 'Abra', 'Absol', 'Aflamanoir'......]
    '''    
    liste=[]
    requete = ""
    reponses = obtenir_toutes_les_reponses(requete)
    for rep in reponses :
        liste.append(rep[0])
    return liste

# fonction de recherche des attributs d'un pokemon
def recherche_attributs_pokemon(nom_pokemon):
    """
    renvoie un objet de la classe Pokemon correspondant au nom donné
    """
    requete = ""
    reponse = obtenir_une_reponse(requete)
    # return  Pokemon(reponse) # <-------- à décommenter
    return None            # <---------- à enlever

# fonction recherche des évolutions du pokemon
def recherche_evolutions(nom_pokemon):
    """
    renvoie la liste des noms des évolutions d'un pokemon
    exemple:
        return =['Aquali', 'Givrali', 'Mentali', 'Noctali', 'Nymphali', 'Phyllali', 'Pyroli', 'Voltali']
    """
    liste_evolutions=[]
    ...
    return liste_evolutions

def recherche_types(nom_pokemon):
    """
    Cette fonction renvoie la liste des types du pokemon spécifié en argument
    argument:
        nom_pokemon:str
    return:
        list
    exemple:
        liste=['Acier', 'Vol']
    """
    liste=[]
    ...
    return liste