import os
import requests
import xml.etree.ElementTree as ET
from pathlib import Path
from datetime import datetime
from dotenv import load_dotenv


# --------------------------------------------------
# ENV
# --------------------------------------------------

BASE_DIR = Path(__file__).resolve().parent.parent

ENV_PATH = BASE_DIR / ".env"
load_dotenv(ENV_PATH)

API_KEY = os.environ.get("API_KEY")
LOGIN_URL = os.environ.get(
    "LOGIN_URL",
    "https://api.unas.eu/shop/login"
)

TOKEN_FILE = BASE_DIR / os.environ.get(
    "TOKEN_FILE",
    "unasapi/token.txt"
)


# --------------------------------------------------
# UNAS LOGIN
# --------------------------------------------------

def login_to_unas(api_key):
    request_xml = f"""<?xml version="1.0" encoding="UTF-8"?>
<Params>
    <ApiKey>{api_key}</ApiKey>
    <WebshopInfo>true</WebshopInfo>
</Params>
"""

    headers = {
        "Content-Type": "application/xml"
    }

    try:
        response = requests.post(
            LOGIN_URL,
            data=request_xml,
            headers=headers,
            timeout=60
        )

        response.raise_for_status()

        root = ET.fromstring(response.text)

        token_node = root.find("Token")
        expire_node = root.find("Expire")

        if token_node is None:
            print("Nem található Token mező az UNAS válaszban.")
            print("UNAS válasz:")
            print(response.text[:2000])
            return False

        if expire_node is None:
            print("Nem található Expire mező az UNAS válaszban.")
            print("UNAS válasz:")
            print(response.text[:2000])
            return False

        token = token_node.text.strip()
        expiry = expire_node.text.strip()

        expiry_datetime = datetime.strptime(
            expiry,
            "%Y.%m.%d %H:%M:%S"
        )

        TOKEN_FILE.parent.mkdir(
            parents=True,
            exist_ok=True
        )

        with open(
            TOKEN_FILE,
            "w",
            encoding="utf-8"
        ) as file:
            file.write(
                f"{token}\n{expiry_datetime}"
            )

        print(f"Token received: {token}")
        print(f"Token expires at: {expiry_datetime}")
        print(f"Token file: {TOKEN_FILE}")

        return True

    except requests.exceptions.RequestException as e:
        print(f"Hiba az API hívás során: {e}")
        return False

    except ET.ParseError as e:
        print(f"Hiba az XML feldolgozása során: {e}")
        print(response.text[:2000])
        return False

    except Exception as e:
        print(f"Váratlan hiba történt: {e}")
        return False


# --------------------------------------------------
# MAIN
# --------------------------------------------------

if __name__ == "__main__":

    if not API_KEY:
        print("Hiányzik az API_KEY a .env fájlból.")
        raise SystemExit(1)

    login_to_unas(API_KEY)