import osmnx as ox


def tableau_vers_chaine_caractere(tableau, separateur):
    """
    Cette fonction a pour but de transformer un tableau de chaîne de caractère
    vers une chaine de caractère

    :param tableau: tableau de chaine de caractère
    :param separateur: chaîne de caractère servant à séparer les cases du tableau
    :return: concaténation des chaines de caractère du tableau sépparré à l'aide d'un ou plusieurs caractères.
    La chaine de retour commence par le séparateur
    """
    retour = ""
    for chaine in tableau:
        retour = retour + separateur + chaine
    return retour


def sauvearde_graphique(graphique, _nom_ville, _informations_supplementaires):
    """
    Cette méthode a pour but de sauvegarder un graphique issu de OSMnx sous le format graphml dans le dossier Data


    :param _nom_ville : nom de la ville dont on veut récupérer le graphe viaire
    :param _informations_supplementaires : Les informations supplémentaires nécessaires comme le nom de la région,
    l'état, le pays ...
    :param graphique: graphique viaire à sauvegarder
    :return:
    """
    ox.save_graphml(graphique, "./Data/" + _nom_ville +
                    tableau_vers_chaine_caractere(_informations_supplementaires, "_") + ".graphml")


def recuperer_graphe_viaire_ville(_nom_ville, _informations_supplementaires):
    """
    Cette méthode permet de récupérer sur openstreetmap les données concernant le nom de la ville et les
    informations supplémentaires. Le retour peut être autre-chose qu'une ville comme une région.

    :param _nom_ville : nom de la ville dont on veut récupérer le graphe viaire
    :param _informations_supplementaires : Les informations suplémentaires nécessaire comme le nom de la région,
    l'état ou le pays
    :return: graph viaire de la ville. Les noeuds sont les intersections entre les rues et les arêtes sont les rues
    entre les intersections
    """
    return ox.graph_from_place(nom_ville + tableau_vers_chaine_caractere(informations_supplementaires, ", "),
                               network_type="drive")

if __name__ == '__main__':
    nom_ville = "Bolbec"
    informations_supplementaires = ["Normandie", "France"]
    G = recuperer_graphe_viaire_ville(nom_ville, informations_supplementaires)
    sauvearde_graphique(G, nom_ville, informations_supplementaires)
    fig, ax = ox.plot_graph(G)
