# -*- coding: utf-8 -*-
"""
Created on Wed Jun 26 15:16:36 2024

@author: Stéphane Pasquet
"""

import mysql.connector
import pandas as pd
import matplotlib.pyplot as plt

# Connexion à la base de données
conn = mysql.connector.connect(
    host="localhost",
    user="root",      # Remplacez par votre nom d'utilisateur
    password="",  # Remplacez par votre mot de passe
    database="courspasquet"
)
# Création d'un curseur
cursor = conn.cursor()

# Exécution de la requête SQL avec jointure
query = """
SELECT a.date, a.prix_total, c.cesu 
FROM actes a
JOIN clients c ON a.idClient = c.idClient
"""
cursor.execute(query)
rows = cursor.fetchall()

# Fermeture de la connexion
cursor.close()
conn.close()

# Conversion des données en DataFrame pandas
df = pd.DataFrame(rows, columns=['date', 'prix_total', 'cesu'])

# Ajustement de prix_total si cesu est égal à 0
df['prix_total'] = df.apply(lambda row: row['prix_total'] * 0.75 if row['cesu'] == 0 else row['prix_total'], axis=1)

# Conversion de la colonne 'date' en datetime
df['date'] = pd.to_datetime(df['date'])

# Extraction du mois et de l'année
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month

# Filtrage des données pour exclure l'année 2021
df = df[df['year'] != 2021]

# Agrégation par mois et par année
monthly_totals = df.groupby(['year', 'month'])['prix_total'].sum().unstack(level=0)

# Création du graphique avec des barres côte-à-côte
ax = monthly_totals.plot(kind='bar', figsize=(12, 8), width=0.8)

# Personnalisation du graphique
plt.title('Montant total par mois et par année')
plt.xlabel('Mois')
plt.ylabel('Montant total')
plt.xticks(rotation=0)
plt.legend(title='Année', bbox_to_anchor=(1.05, 1), loc='upper left')

# Calcul des moyennes des totaux mensuels par année
monthly_averages = monthly_totals.mean()

# Calcul de la moyenne globale (toutes années confondues)
overall_average = monthly_totals.stack().mean()  # ← ligne à ajouter

# Affichage des moyennes sur le graphique
#avg_text = "Salaire moyen:\n" + "\n".join([f"{year}: {value:.2f}" for year, value in monthly_averages.items()])
# Affichage des moyennes sur le graphique
avg_text = (
    "Salaire moyen:\n"
    + "\n".join([f"{year}: {value:.2f}" for year, value in monthly_averages.items()])
    + f"\n\nMoyenne globale:\n{overall_average:.2f}"  # ← ligne à ajouter
)
plt.text(1.05, 0.5, avg_text, transform=ax.transAxes, verticalalignment='center')

# Ajustement du layout pour mieux afficher la légende et le texte
plt.tight_layout()

# Calcul des moyennes des totaux mensuels par année
monthly_averages = monthly_totals.mean()


# Affichage du graphique
plt.show()
