# env/bin/bash sh

. demande_y_n.sh

#le tableau de choix possible de types pour la nouvelle variable
declare liste_choix=("BigIntegerField" "BooleanField" "FloatField" "IntegerField")





function demande_information()
{
	# cette fonction permet de demander à l'utilisateur le type et le nom de la nouvelle colonne à rajouter dans
	# la base de donnée django

	#le préfixe de la variable dans la base de donnée
  prefixe_nom_variable="gvvi_"
  #le préfixe des fonctions de récupérations d'information
  prefixe_nom_fonction="get_"
  #chemin vers le fichier de sauvegarde
  fichier_decision_utilisateur_ajout_colonne=./sauvegarde_var
  #le chemin vers le model de l'application recuperateur_reseau_viaire
  chemin_vers_model=./../recuperateur_reseau_viaire/models.py
  #le chemin du fichier de la classe OSMnx_recuperation_graph_information
  chemin_vers_fonction=./../OSM_outils/OSMnx_recuperation_graph_information.py
	#demande le nom de la variable sans le préfixe
	while true
	do
    read -r -p "quelle nom de variable choisissez vous ? " nomvariable
    if grep -qw "$prefixe_nom_variable$nomvariable" "$chemin_vers_model"
    then
          if demande_y_n "la variable $nomvariable existe déjà dans le modèle, voulez vous continuer ? y ou n "
          then
            break
          fi
    else
      break
    fi
  done
  nomvariable=$prefixe_nom_variable$nomvariable

	echo "choisissez un des types de django suivants en entrant le chiffre associé : "
  select choix in ${liste_choix[*]}
  do
    if [[ -n $choix ]]
    then
      break
    fi
  done

  #récupére le nom de la méthode de remplissage des données et on y ajoute le préfixe get_
  while true
	do
    read -r -p "Donnez le nom de la méthode de récupération d'information dans la classe OSMnx_recuperation_graph_information : " nom_fonction
    if grep -qw "$prefixe_nom_fonction$nom_fonction" "$chemin_vers_fonction"
    then
          if demande_y_n "la fonction $nom_fonction existe déjà dans la classe OSMnx_recuperation_graph_information,
          voulez vous continuer ? y ou n "
          then
            break
          fi
    else
      break
    fi
  done
  nom_fonction=$prefixe_nom_fonction$nom_fonction
  nom_fichier_test=""
  while true
  do
    read -r -p "Donnez le nom du fichier test pour cette fonction : " nom_fichier_test
    fichier_test_verification=./../OSM_outils/Tests/"test_$nom_fichier_test.py"
    if [[ -z $fichier_test_verification ]]
    then
      continue
    fi
    if [[ ! (-a $fichier_test_verification) ]]
    then
      break
    fi
    if [[ -w $fichier_test_verification ]]
    then
      break
    fi
done

  #ajout du préfixes test
  nom_fichier_test="test_$nom_fichier_test"

  #remplissage du fichier tampon d'attente
  {
  echo "nomvariable	$nomvariable"
  echo "type $choix"
  echo "nom_fonction	$nom_fonction"
  echo "nom_fichier $nom_fichier_test"
  } > $fichier_decision_utilisateur_ajout_colonne
}

function ajoute_fonction_OSMnx_recuperation_graph_information() {
  # cette fonction a pour but de rajouter à la liste de fonction une nouvelle méthode de récupération de données vide.
  # Cela pour permettre d'éviter les erreurs de changement de noms
  # elle prend en paramètre le nom de la variable et le nom de la fonction à créer
  nomvariable=$1
  nom_fonction=$2
  #le chemin du fichier de la classe OSMnx_recuperation_graph_information
  chemin_vers_fonction=./../OSM_outils/OSMnx_recuperation_graph_information.py
  if grep -qw "$nom_fonction" "$chemin_vers_fonction"
  then
    return 0
  fi

  #chemin vers le fichier d'origine
  chemin_classe_extracteur_information=./../OSM_outils/OSMnx_recuperation_graph_information.py
  #chemin vers le fichier model de fonction
  chemin_vers_fichier_model_fonction=./fonction_fichier_model

  #ajoute un retour chariot entre les méthodes
  echo "" >> $chemin_classe_extracteur_information
  sed -s "s/&&nom_variable&&/$nomvariable/g" $chemin_vers_fichier_model_fonction | sed -s "s/&&nom_méthode_recup_info&&/$nom_fonction/g" >> $chemin_classe_extracteur_information

}

function ajoute_fichier_test_OSMnx_recuperation_graph_information() {
  # Cette méthode permet de créer le fichier de test initiale de la nouvelle méthode
  # ajouté à la classe OSMnx_recuperation_graph_information
  # Elle prend en paramètre le nom du fichier au qu'elle elle ajoute le préfixe "test_"
  #ajout du suffixe .py
  nom_fichier_test="$1.py"

  chemin_vers_nouveau_fichiers_tests=./../OSM_outils/Tests/"$nom_fichier_test"
  chemin_vers_fichier_model_tests=./model_test_OSMnx_recuperation_graph_information

  if [[ -w $chemin_vers_nouveau_fichiers_tests ]]
  then
    echo -e "\n" >> "$chemin_vers_nouveau_fichiers_tests"
    sed -n '/test_de_base/, $p' $chemin_vers_fichier_model_tests >> "$chemin_vers_nouveau_fichiers_tests"
  else
    cat $chemin_vers_fichier_model_tests > "$chemin_vers_nouveau_fichiers_tests"
  fi
}

echo "pour la migration de donnée de django nous devons connaitre quelques informations."

demande_information

ajoute_fonction_OSMnx_recuperation_graph_information "$nomvariable" "$nom_fonction"

ajoute_fichier_test_OSMnx_recuperation_graph_information "$nom_fichier_test"

echo "Nous avons ajouté une fonction dans la classe OSMnx_recuperation_graph_information afin de pouvoir l'utiliser
lors de la migration de données. vous devez maintenant la modifier pour y associer le calcul que vous souhaité."
echo "Nous avons également ajouté le fichier test dans OSMnx_recuperation_graph_information/Tests/ modifier le pour
vérifier si le calcul fonctionne comme vous le voulez."