import re
from datetime import date, timedelta

from db import get_session
from sqlalchemy import text


def main():
    db = next(get_session())
    q = db.execute(text("SELECT * FROM dbo.Forderungen_Kommentar_Rohdaten"))

    for row in q.fetchall():
        for i, r in enumerate(row.Kommentar.split("\n"), 1):
            comment_date = row.Timestamp + timedelta(minutes=i)
            comment_user = row.Benutzer_ID
            r = r.replace("'", "")
            d, u = get_date_and_user_from_comment(r)
            db.execute(
                text(
                    "INSERT INTO dbo.Forderungen_Kommentar "
                    f"VALUES ('{row.Client_DB}', '{row.Beleg_Nr}', '{comment_date}', '{comment_user}', '{r}')"
                )
            )

    db.commit()


def get_details_from_comments():
    db = next(get_session())
    q = db.execute(text("SELECT * FROM dbo.Forderungen_Kommentar_Rohdaten"))

    for row in q.fetchall():
        data = {}

        az = re.search(r"^AZ\:?\s(\d+\/\d+)", row.Kommentar)
        if az:
            data["Rechtsanwalt_Aktenzeichen"] = az[1]

        if "HP Schaden" in row.Kommentar:
            data["Versicherung_Typ"] = "Haftpflicht"
        if "Haftpflicht" in row.Kommentar:
            data["Versicherung_Typ"] = "Haftpflicht"
        if "VK Schaden" in row.Kommentar:
            data["Versicherung_Typ"] = "Vollkasko"
        if "VK-Schaden" in row.Kommentar:
            data["Versicherung_Typ"] = "Vollkasko"
        if "TK Schaden" in row.Kommentar:
            data["Versicherung_Typ"] = "Teilkasko"
        if "TK-Schaden" in row.Kommentar:
            data["Versicherung_Typ"] = "Teilkasko"

        s = re.search(r"Schaden (.*) bei (.*) eingereicht", row.Kommentar)
        if s:
            data["Schadennummer"] = s[1]
            data["Vers_Adresse_ID"] = s[2].replace("'", "").lower()[:25]

        if data:
            db.execute(
                text(
                    "UPDATE dbo.Forderungen_Details SET "
                    + ", ".join([f"{k} = '{v}'" for k, v in data.items()])
                    + f" WHERE Client_DB = '{row.Client_DB}' AND Beleg_Nr = '{row.Beleg_Nr}'"
                )
            )
    db.commit()


def get_date_and_user_from_comment(r: str) -> tuple[date, str]:
    m = re.search(r"(\d\d\.\d\d?)\.?[\/\s](\w+)", r)
    if m:
        date_split = m[1].split(".")
        return date(2026, date_split[1], date_split[0]), m[2]

    if r.startswith("EWB"):
        return None, "mde"

    az = re.search(r"^AZ\:?\s(\d+\/\d+)", r)
    if az:
        return None, "mde"
    return None, "mde"


if __name__ == "__main__":
    get_details_from_comments()
