import pandas as pd
import numpy as np
import plotly.express as px
import plotly.offline as pyo
import webbrowser
import plotly.io as pio
import os

#compteur 
i = 0

#récupération des données 
data = pd.read_csv('./data/data24h_02-03-23.csv', sep=';')
data = data.replace('nan', np.nan)
data = data.dropna()
#création de colonnes 
data['heure_relevé'] = ''
data['date_relevé'] = ""
data['date_dernière_pluie'] = ""
data['heure_dernière_pluie'] = ""
data['heure_min_relevé'] = ""
data['minutes_relevé'] = ""
#remplissage des colonnes 
for ligne in data['created_at']:
    if ligne != 'nan':
         ligne = str(ligne)
         separe = ligne.split('T')
         heure = separe[1].split('.')
         vraiheure = heure[0].split(':',2)
         data['heure_min_relevé'][i-1]= vraiheure[0]+':'+vraiheure[1]
         data['heure_relevé'][i] = vraiheure[0]
         data['minutes_relevé'][i] = vraiheure[1]
         data['date_relevé'][i] = separe[0]
    i += 1
i = 0
for ligne in data['lastRain']:
     separe = ligne.split('T')
     heure = separe[1].split('.')
     heure = heure[0].split(':')
     data['date_dernière_pluie'] = separe[0] 
     data['heure_dernière_pluie'] = heure[0]+':'+heure[1]
     i += 1

for i in range(len(data['windspeedmph'])):
    ligne = data['windspeedmph'][i]
    if isinstance(ligne, tuple):
        ligne = ligne[0]
    ligne = ligne * 1.60934
    ligne = round(ligne, 2)
    data['windspeedmph'][i] = ligne
    
for ligne in range(len(data['tempf'])):
    data['tempf'][ligne] = round((data['tempf'][ligne] - 32) * (5/9), 3)
    


#changements de noms 
data= data.rename(columns={'dewPoint':'Point de rosée','humidity':'humidité','dailyrainin':'Pluie sur une journée','monthlyrainin':'Pluie sur un mois','windspeedmph':'vitesse du vent en m/s','tempf':'température'})

#supprimer les colonnes inutiles 
data = data[['date_relevé','heure_min_relevé','heure_relevé','minutes_relevé','température','Point de rosée','humidité','vitesse du vent en m/s','heure_dernière_pluie','date_dernière_pluie','Pluie sur une journée','Pluie sur un mois']]

#moyenne de la température sur la période 

moy_temp = round(data['température'].mean(),2)
moy_temp = "La temperature moyenne sur la periode " + data['date_relevé'][0] +" est de : " + str(moy_temp) + 'degres'
dernière_pluie = "La dernière pluie a eu lieu le " + data['date_dernière_pluie'][0] +" à " + data['heure_dernière_pluie'][0]

print(moy_temp)
print(dernière_pluie)
i = 1
data20min = pd.DataFrame(columns=['heure_relevé','minutes_relevé','heure_min_relevé','température', 'Point de rosée','humidité'])
for index, row in data.iterrows():
    if int(row['minutes_relevé']) % 20 == 0:
        data20min = data20min.append({'heure_relevé': row['heure_relevé'],'minutes_relevé': row['minutes_relevé'],'heure_min_relevé': row['heure_min_relevé'], 'température': row['température'], 'Point de rosée': row['Point de rosée'], 'humidité': row['humidité']}, ignore_index=True)



#donnes lissées (moyennes, maximums par heures)
# data_moyennes = data[['heure_relevé','température', 'Point de rosée','humidité']]
# data_moyennes = data_moyennes.groupby('heure_relevé').mean()

# data_maximum = data[['heure_relevé','vitesse du vent en m/s']]
# data_maximum = data_maximum.groupby('heure_relevé').max()

# data2 = data_moyennes[['température', 'Point de rosée','humidité']] + data_maximum [['vitesse du vent en m/s']]


 # Tracé des trois graphiques
fig1 = px.line(data20min, x='heure_min_relevé', y='humidité', title="Graphique de l'Humidité")
fig2 = px.line(data20min, x='heure_min_relevé', y='Point de rosée', title="Graphique du point de rosée")
fig3 = px.line(data20min, x='heure_min_relevé', y='température', title='Graphique de la Vitesse du vent')



# Ajout des axes des abscisses et des ordonnées à chaque graphique
fig1.update_xaxes(title_text='minutes')
fig1.update_yaxes(title_text='humidité')
fig2.update_xaxes(title_text='minutes')
fig2.update_yaxes(title_text='Point de Rosée')
fig3.update_xaxes(title_text='minutes')
fig3.update_yaxes(title_text='température')


fig1_html = pyo.plot(fig1, output_type='div')
fig2_html = pyo.plot(fig2, output_type='div')
fig3_html = pyo.plot(fig3, output_type='div')


fig1_html = pio.to_html(fig1, full_html=False)
fig2_html = pio.to_html(fig2, full_html=False)
fig3_html = pio.to_html(fig3, full_html=False)

fig_html = fig1_html + fig2_html+ fig3_html
# Ouvrir le fichier HTML et ajouter la figure

fichier_html = '<!DOCTYPE html><html lang="fr" style="font-family: Calibri"><head><meta charset="UTF-8"><title>NEOSOFT x STID</title></head><body style="background-color: #F2F2F2"><header style="display: flex; align-items: center; background-color: #1E90FF; color: #FFF; padding: 20px;"><div style="height: 100px;"><img src="https://i0.wp.com/www.frenchweb.fr/wp-content/uploads/2018/07/neosoftfw500.png?resize=200%2C200&ssl=1" alt="Logo" width="100" height="100"></div><div style="text-align: left;"><h1 style="font-size: 60px; margin: 10px; padding: 0;">NEO-SOFT x STID :</h1><h2 style="font-size: 30px; margin: 10px; padding: 0;">le Potager Connecte</h2></div></header><main style="display: flex; flex-direction: column; justify-content: center; align-items: center; padding: 20px;"><div id="graph1" style="background-color: #FFF; padding: 20px; border: 1px solid #CCC; margin-bottom: 20px; text-align: center; width: 100%;"><h3 style="font-size: 24px; margin-top: 0; margin-bottom: 10px; text-decoration: underline; width: 100%;">Graphique 1</h3>Graph1<p style="font-size: 18px; margin-top: 10px; margin-bottom: 0; width: 100%;">Description du graphique 1</p></div id="graph1"><div id="graph2" style="background-color: #FFF; padding: 20px; border: 1px solid #CCC; margin-bottom: 20px; text-align: center; width: 100%;"><h3 style="font-size: 24px; margin-top: 0; margin-bottom: 10px; text-decoration: underline; width: 100%;">Graphique 2</h3>Graph2<p>Description du graphique 2</p></div id="graph2"><div id="graph3" style="background-color: #FFF; padding: 20px; border: 1px solid #CCC; margin-bottom: 20px; text-align: center; width: 100%;"><h3 style="font-size: 24px; margin-top: 0; margin-bottom: 10px; text-decoration: underline; width: 100%;">Graphique 3</h3>Graph3<p style="font-size: 18px; margin-top: 10px; margin-bottom: 0; width: 100%;">Description du graphique 3</p></div id="graph3"></main></body></html>'

if os.path.exists("./dashboard.html"):
    os.remove("./dashboard.html")
    
file = open('dashboard.html', "w" )
file.write(fichier_html)
file.close()
with open("dashboard.html", "r+") as f:
   contenu = f.read()
    # Rechercher le code JavaScript précédemment écrit
   index_start = contenu.find("<script>")
   index_end = contenu.find("</script>", index_start) + len("</script>")
   if index_start != -1 and index_end != -1:
        # Supprimer le code JavaScript précédemment écrit
        contenu = contenu[:index_start] + contenu[index_end:]
        f.seek(0)
        f.write(contenu)
        f.truncate()
   index1 = contenu.index('</div id="graph1">')
    # Insérer le code HTML de la figure
   contenu = contenu[:index1] + fig1_html + contenu[index1:]
   f.seek(0)
   f.write(contenu)
   f.truncate()
f.close()

with open("dashboard.html", "r+") as f:
   contenu = f.read()
    # Rechercher le code JavaScript précédemment écrit
   index_start = contenu.find("<script>")
   index_end = contenu.find("</script>", index_start) + len("</script>")
   if index_start != -1 and index_end != -1:
        # Supprimer le code JavaScript précédemment écrit
        contenu = contenu[:index_start] + contenu[index_end:]
        f.seek(0)
        f.write(contenu)
        f.truncate()
   index2 = contenu.index('</div id="graph2">')
    # Insérer le code HTML de la figure
   contenu = contenu[:index2] + fig2_html + contenu[index2:]
   f.seek(0)
   f.write(contenu)
   f.truncate()
f.close()

with open("dashboard.html", "r+") as f:
   contenu = f.read()
    # Rechercher le code JavaScript précédemment écrit
   index_start = contenu.find("<script>")
   index_end = contenu.find("</script>", index_start) + len("</script>")
   if index_start != -1 and index_end != -1:
        # Supprimer le code JavaScript précédemment écrit
        contenu = contenu[:index_start] + contenu[index_end:]
        f.seek(0)
        f.write(contenu)
        f.truncate()
   index3 = contenu.index('</div id="graph3">')
    # Insérer le code HTML de la figure
   contenu = contenu[:index3] + fig3_html + contenu[index3:]
   f.seek(0)
   f.write(contenu)
   f.truncate()
f.close()
# ouvrir le fichier HTML en mode écriture
with open("dashboard.html", "r+") as f:
    contenu = f.read()
    # Rechercher le code JavaScript précédemment écrit
    index_start = contenu.find(moy_temp)
    index_end = contenu.find("</h2>", index_start) + len("</h2>")
    if index_start != -1 and index_end != -1:
        # Supprimer le code JavaScript précédemment écrit
        contenu = contenu[:index_start] + contenu[index_end:]
        f.seek(0)
        f.write(contenu)
        f.truncate()
    index = contenu.index("</h2>")
    # écrire la balise HTML avec la variable à l'intérieur
    temperature_periode = contenu[:index1] + moy_temp + contenu[index1:]
    f.seek(0)
    f.write(temperature_periode)
    f.truncate()
f.close()

url = 'dashboard.html'
webbrowser.open(url)