import pandas as pd

# Nastavení cesty ke vstupním datům
file_katuze = "C:/Škola/BAK/DATA/PROCESSED/Cr_Katuze_VSECHNY_OBDOBI.xlsx"
file_obce = "C:/Škola/BAK/DATA/PROCESSED/CR_Obce_VSECHNY_OBDOBI.xlsx"

# Seznam období odpovídající listům v souborech
obdobi_list = {
    "20200801": "CR_obce_20200801_20200828_Merge",
    "20201006": "CR_obce_20201006_20201110_Merge",
    "20220723": "CR_obce_20220723_20220819_Merge",
    "20221010": "CR_obce_20221010_20221106_Merge",
}

obdobi_list_katuze = {
    "20200801": "CR_katuze_20200801_20200828_Mer",
    "20201006": "CR_katuze_20201006_20201110_Mer",
    "20220723": "CR_katuze_20220723_20220819_Mer",
    "20221010": "CR_katuze_20221010_20221106_Mer",
}

# Kategorie osob
categories = {
    "Rezid": "Rezid_d",
    "Dojizd": "PracSkolDoj_d",
    "Navstiv": "Navst_d",
}

# Definování pracovních dnů a víkendu
workdays = [f"d{i}_" for i in range(1, 6)]
weekend = ["d6_", "d7_"]


# Funkce pro zpracování dat
def process_data(file_path, obdobi_list):
    xls = pd.ExcelFile(file_path)
    final_df = None

    for obdobi, sheet in obdobi_list.items():
        df = xls.parse(sheet)
        df_result = df[["KOD", "NAZEV"]].copy()

        # Výpočet průměrných hodnot za pracovní dny a víkend
        for category, prefix in categories.items():
            workday_cols = [col for col in df.columns if any(wd in col for wd in workdays) and col.startswith(prefix)]
            weekend_cols = [col for col in df.columns if any(wd in col for wd in weekend) and col.startswith(prefix)]

            df_result[f"{category}_workday_{obdobi}"] = df[workday_cols].mean(axis=1).fillna(0).round().astype(int)
            df_result[f"{category}_weekend_{obdobi}"] = df[weekend_cols].mean(axis=1).fillna(0).round().astype(int)

        # Výpočet celkového počtu osob zvlášť pro pracovní dny a víkend
        df_result[f"Total_workday_{obdobi}"] = (
                df_result[f"Rezid_workday_{obdobi}"] + df_result[f"Dojizd_workday_{obdobi}"] + df_result[
            f"Navstiv_workday_{obdobi}"]
        )

        df_result[f"Total_weekend_{obdobi}"] = (
                df_result[f"Rezid_weekend_{obdobi}"] + df_result[f"Dojizd_weekend_{obdobi}"] + df_result[
            f"Navstiv_weekend_{obdobi}"]
        )

        # Výpočet relativních hodnot v rámci workday/weekend
        for category in categories:
            df_result[f"{category}_workday_rel_{obdobi}"] = (
                    df_result[f"{category}_workday_{obdobi}"] / df_result[f"Total_workday_{obdobi}"]
            ).fillna(0).round(3)

            df_result[f"{category}_weekend_rel_{obdobi}"] = (
                    df_result[f"{category}_weekend_{obdobi}"] / df_result[f"Total_weekend_{obdobi}"]
            ).fillna(0).round(3)

        if final_df is None:
            final_df = df_result
        else:
            final_df = final_df.merge(df_result, on=["KOD", "NAZEV"], how="outer")

    return final_df


# Zpracování dat pro obce
df_obce_final = process_data(file_obce, obdobi_list)

# Zpracování dat pro katastrální území
df_katuze_final = process_data(file_katuze, obdobi_list_katuze)

# Uložení výsledků do souborů
output_katuze = "C:/Škola/BAK/DATA/PROCESSED/TypologiePrumeryRelatKatuze.xlsx"
output_obce = "C:/Škola/BAK/DATA/PROCESSED/TypologiePrumeryRelatObce.xlsx"

df_katuze_final.to_excel(output_katuze, index=False, engine="openpyxl")
df_obce_final.to_excel(output_obce, index=False, engine="openpyxl")

print("Výpočet dokončen!")
print(f" Výstupní soubory uloženy:\n - {output_katuze}\n - {output_obce}")

# skript byl optimalizován pomocí ChatGPT 4.0
