import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# Cesta k souboru s daty
file_path = r"C:\Škola\BAK\DATA\PROCESSED\CR_Obce_VSECHNY_OBDOBI.xlsx"

# Načtení všech listů jako slovník datových rámců
sheets_obce = pd.read_excel(file_path, sheet_name=None)

# Výběr listů
sheets_map = {
    "CR_obce_20200801_20200828_Merge": "COVID-19 Léto 2020",
    "CR_obce_20201006_20201110_Merge": "COVID-19 Podzim 2020",
    "CR_obce_20220723_20220819_Merge": "PostCOVID-19 Léto 2022",
    "CR_obce_20221010_20221106_Merge": "PostCOVID-19 Podzim 2022"
}

# Výběr seznamu obcí, které chceme analyzovat
vybrane_obce = [
    "Prostějov", "Přerov", "Šumperk", "Mohelnice", "Zábřeh",
    "Jeseník", "Velké Losiny", "Bouzov", "Lutín", "Bystročice"
]

# Příprava seznamu pro výsledné hodnoty
barplot_data = []

# Výpočet průměrných hodnot návštěvníků a dojíždějících pro každou obec a období
for sheet_name, label in sheets_map.items():
    df_sheet = sheets_obce[sheet_name]
    df_filtered = df_sheet[df_sheet["NAZEV"].isin(vybrane_obce)]

    for obec in vybrane_obce:
        obec_data = df_filtered[df_filtered["NAZEV"] == obec]

        # Výpočet průměrného počtu návštěvníků za víkend (pátek–neděle, všechny hodiny)
        navstevnici_values = []
        for d in range(5, 8):  # Pátek (5), Sobota (6), Neděle (7)
            for h in range(24):  # Hodiny 0-23
                column_name = f"Navst_d{d}_{h}_h"
                if column_name in obec_data.columns:
                    navstevnici_values.extend(obec_data[column_name].values)

        prumer_navstevnici = sum(navstevnici_values) / 72 if navstevnici_values else 0  # 3 dny × 24 hodin = 72 hodnot

        # Výpočet průměrného počtu dojíždějících za pracovní týden (pondělí–pátek, 6:00–20:00)
        dojizdejici_values = []
        for d in range(1, 6):  # Pondělí (1) až Pátek (5)
            for h in range(6, 21):  # Hodiny 6–20
                column_name = f"PracSkolDoj_d{d}_{h}_h"
                if column_name in obec_data.columns:
                    dojizdejici_values.extend(obec_data[column_name].values)

        prumer_dojizdejici = sum(dojizdejici_values) / 75 if dojizdejici_values else 0  # 5 dní × 15 hodin = 75 hodnot

        # Uložení dat pro graf
        barplot_data.append(["Návštěvníci", obec, label, prumer_navstevnici])
        barplot_data.append(["Dojíždějící", obec, label, prumer_dojizdejici])

# Vytvoření výsledného DataFrame
df_barplot = pd.DataFrame(barplot_data, columns=["Typ", "Obec", "Období", "Počet osob"])

# Definice barev pro jednotlivá období
palette_colors = {
    "COVID-19 Léto 2020": "#1f77b4",
    "COVID-19 Podzim 2020": "#aec7e8",
    "PostCOVID-19 Léto 2022": "#d62728",
    "PostCOVID-19 Podzim 2022": "#ff9896"
}

# Vykreslení grafu pro návštěvníky
plt.figure(figsize=(15, 6))
sns.barplot(data=df_barplot[df_barplot["Typ"] == "Návštěvníci"],
            x="Obec", y="Počet osob", hue="Období", palette=palette_colors)
plt.xticks(rotation=45)
plt.title("PRŮMĚRNÝ POČET NÁVŠTĚVNÍKŮ VE VYBRANÝCH OBCÍCH (VÍKEND)", fontsize=16, fontweight="bold")
plt.ylabel("Počet návštěvníků", fontsize=14)
plt.xlabel("Obec", fontsize=14)
plt.legend(title="Období")
plt.grid(axis="y", linestyle="--", alpha=0.7)
plt.tight_layout()
plt.show()

# Vykreslení grafu pro dojíždějící
plt.figure(figsize=(15, 6))
sns.barplot(data=df_barplot[df_barplot["Typ"] == "Dojíždějící"],
            x="Obec", y="Počet osob", hue="Období", palette=palette_colors)
plt.xticks(rotation=45)
plt.title("PRŮMĚRNÝ POČET DOJÍŽDĚJÍCÍCH VE VYBRANÝCH OBCÍCH (PRACOVNÍ TÝDEN)", fontsize=16, fontweight="bold")
plt.ylabel("Počet dojíždějících", fontsize=14)
plt.xlabel("Obec", fontsize=14)
plt.legend(title="Období")
plt.grid(axis="y", linestyle="--", alpha=0.7)
plt.tight_layout()
plt.show()

# Skript byl optimalizován pomocí nástroje ChatGPT 4.0
