import sys
import json
import pandas as pd
import re

def clean_name(name: str):
    # Temporäres Entfernen von "Krankenhaus" und "Klinik" aus dem Namen
    name = re.sub(r'\b(Krankenhaus|Klinik)\b', '', name, flags=re.IGNORECASE).strip()
    # Mehrere aufeinanderfolgende Leerzeichen reduzieren
    name = re.sub(r'\s+', ' ', name)
    return name

def check_klinik(name: str, stadt: str, file_path: str = "Klinikliste.xlsx"):
    df = pd.read_excel(file_path)

    if not {'Klinikname', 'Stadt'}.issubset(df.columns):
        return {"error": "Spalten nicht gefunden"}

    # Prüfen, ob die Stadt in der Liste existiert
    if stadt.lower() not in df['Stadt'].str.lower().unique():
        return {"error": "Stadt nicht gefunden"}

    # Stadt filtern
    df_filtered = df[df['Stadt'].str.lower() == stadt.lower()].copy()
    
    # Namen temporär bereinigen
    cleaned_name = clean_name(name)
    df_filtered.loc[:, 'Klinikname_clean'] = df_filtered['Klinikname'].apply(clean_name)
    
    # Verbesserung: Überprüfen, ob der gesäuberte Name in irgendeinem Kliniknamen enthalten ist
    df_matched = df_filtered[df_filtered['Klinikname_clean'].str.contains(rf'\b{re.escape(cleaned_name)}\b', case=False, na=False)]
    
    # Falls keine exakte Übereinstimmung gefunden wurde, prüfe auf Teilwort-Matches
    if df_matched.empty:
        df_matched = df_filtered[df_filtered['Klinikname_clean'].apply(lambda x: all(word in x for word in cleaned_name.split()))]
    
    
    if df_matched.empty:
        return {"message": {"auswahl": df_filtered['Klinikname'].tolist()}}
    elif len(df_matched) == 1:
        return {"message": "success"}
    else:
        return {"message": {"auswahl": df_matched['Klinikname'].tolist()}}

if __name__ == "__main__":
    # JSON-Eingabe aus der Kommandozeile lesen
    input_data = json.loads(sys.stdin.read())
    
    if "args" not in input_data or "hospital_name" not in input_data["args"] or "stadt" not in input_data["args"]:
        print(json.dumps({"error": "Invalid input format"}))
    else:
        name = input_data["args"]["hospital_name"]
        stadt = input_data["args"]["stadt"]
        result = check_klinik(name, stadt)
        print(json.dumps(result))
