import os

from django.conf import settings
from django.shortcuts import render
from recuperateur_reseau_viaire.forms import Graph_viaire_ville_informationForm_delete
from recuperateur_reseau_viaire.models import Graph_viaire_ville_information, Rassemblement_ville
from .view_valide import valide

def delete(request, graph_id):
    """
    Cette méthode permet de supprimer une ligne de la table Graph_viaire_ville_information ainsi que les lignes
    de la table Rassemblement_ville qui y sont attachées.

    :param request : la requêtes de l'utilisateur
    :param graph_id : l'identifiant de la table de la ligne de la table Graph_viaire_ville_information
    :return:
    """
    graph_viaire_ville_information_instance = Graph_viaire_ville_information.objects.filter(id=graph_id)[0]
    if request.method == 'POST':
        form_u = Graph_viaire_ville_informationForm_delete(request.POST,
                                                           initial={'valeur': graph_viaire_ville_information_instance})
        if form_u.is_valid():
            action_delete_formulaire_valide(form_u.cleaned_data['gvvi_nom'], graph_viaire_ville_information_instance)
            return valide(request)
    else:
        form_u = Graph_viaire_ville_informationForm_delete(initial={'valeur': graph_viaire_ville_information_instance})
        return render(request, "recuperateur_reseau_viaire/delete.html", {'form_d': form_u})


def action_delete_formulaire_valide(gvvi_nom_ville, graph_viaire_ville_information_instance):
    """
    Cette méthode a pour but de faire les actions du formulaire de téléchargement de ville, une fois qu'il est valide.

    Les actions effectuées ici sont :
    - supprimer la ligne dans la table graph_viaire_ville_information
    - supprimer les lignes de la table Rassemblement_ville aant pour attribut ville_englobante égale à la ville de la
    ligne graph_viaire_ville_information

    :param gvvi_nom_ville : le nom de la ville de la ligne de l'instance graph_viaire_ville_information
    :param graph_viaire_ville_information_instance : la ligne de la table graph_viaire_ville_information que nous
    voulons supprimer
    :return:
    """
    graph_viaire_ville_information_instance.gvvi_nom = gvvi_nom_ville
    if os.path.isfile(os.path.join(settings.REGISTER_DIR, gvvi_nom_ville + ".graphml")):
        os.remove(os.path.join(settings.REGISTER_DIR, gvvi_nom_ville + ".graphml"))
    graph_viaire_ville_information_instance.delete()
    # suppression Rassemblement ville
    Rassemblement_ville.objects.filter(ville_englobante=graph_viaire_ville_information_instance.ville_id). \
        delete()