#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Ce code a été récupéré sur le site : https://physique-chimie.discip.ac-caen.fr/spip.php?article1022#pagination_liste_documents_36
Je remercie les auteurs pour cette mise à disposition. 
Mon travail a été de le mettre sous la forme d'un fichier .py

L'objectif ici est d'exploiter à l'aide d'un langage de programmation, des données astronomiques ou satellitaires pour tester les 2eme et 3eme loi de Kepler. 
"""

# import des modules scientifiques
import numpy as np
import matplotlib.pyplot as plt
import csv
from math import sqrt, pi


fig=plt.figure(figsize=(10,10))

plt.subplots_adjust(left=0.125,bottom=0.2,right=0.8,top=0.9,wspace=0.3,hspace=0.5)
ax1 = plt.subplot(211)
ax2 = plt.subplot(212)

def bilan(donnees, referentiel='?', astre='?', ua_bool=True, show=True):
    """ donnees est le fichier de données éphémérides de l'astre """
    with open(donnees) as source:
        donnees = list(csv.DictReader(source, delimiter=";"))
    dates = [donnee["Date (undefined)"][:10] for donnee in donnees]
    dt = int(dates[1][-2:]) - int(dates[0][-2:])
    t = np.array([dt*i for i in range(len(dates))])
    x = np.array([float(donnee["px (au)"].replace(',','.')) for donnee in donnees])
    y = np.array([float(donnee["py (au)"].replace(',','.')) for donnee in donnees])
    d = np.array([float(donnee["Dobs (au)"].replace(',','.')) for donnee in donnees])
    unite = 'ua'
    if not ua_bool:
        ua = 149_597_870_700
        x, y, d = x*ua, y*ua, d*ua
        unite = 'm'
        
    def graphe():      
        
        ax1.plot(x, y, 'r.')
        ax1.scatter(0,0)
        ax1.set_title(f"Position de {astre} (en {unite}) dans le référentiel {referentiel}\n")
        ax1.set_xlabel('x')
        ax1.set_ylabel('y')
        ax1.set_xlim(-6e11, 3e11)
        ax1.set_ylim(-4e11, 4e11)
        ax2.plot(t, d, 'bo-')
        ax2.set_xlabel("t (en j)")
        ax2.set_ylabel(f"d (en u.a)")
        ax2.set_title("Distance Mars-Terre au cours du temps")
        plt.show()
        
    if show:
        graphe()
    return dates, t, x, y, d


donnees = "mars-ephemeride-geocentrique.csv"
bilan_mars = bilan(donnees, astre='Mars', referentiel='Géocentrique', ua_bool=False)

dates, t, x1, y1, d = bilan("ephemerides/terre-heliocentrique-dt16.csv", astre='Terre', referentiel='héliocentrique', show=False)
dates, t, x2, y2, d = bilan("ephemerides/mars-heliocentrique-dt29.csv", astre='Mars', referentiel='héliocentrique', show=False)
dates, t, x3, y3, d = bilan("ephemerides/venus-heliocentrique-dt10.csv", astre='Venus', referentiel='héliocentrique', show=False)
dates, t, x4, y4, d = bilan("ephemerides/mercure-heliocentrique-dt4.csv", astre='Mercure', referentiel='héliocentrique', show=False)

plt.scatter(0, 0)
plt.plot(x1, y1, 'g-', label='Terre')
plt.plot(x2, y2, 'b-', label='Mars')
plt.plot(x3, y3, 'r-', label='Venus')
plt.plot(x4, y4, '-', label='Mercure')
plt.axis("equal")
plt.legend()
plt.title(f"")
plt.show()







