import os
import requests
import xml.etree.ElementTree as ET
from pathlib import Path
from dotenv import load_dotenv


BASE_DIR = Path(__file__).resolve().parent.parent
ENV_PATH = BASE_DIR / ".env"
load_dotenv(ENV_PATH)

TOKEN_FILE = BASE_DIR / os.environ.get("TOKEN_FILE", "unasapi/token.txt")
DOWNLOAD_URL = os.environ.get("DOWNLOAD_URL", "https://api.unas.eu/shop/getProductDB")
BACKUP_FOLDER = BASE_DIR / os.environ.get("BACKUP_FOLDER", "unasapi/backup")

BACKUP_FOLDER.mkdir(parents=True, exist_ok=True)


def load_token():
    with open(TOKEN_FILE, "r", encoding="utf-8") as file:
        return file.readline().strip()


def request_unas_database(token):
    headers = {
        "Authorization": f"Bearer {token}",
        "Content-Type": "application/xml"
    }

    request_xml = """<?xml version="1.0" encoding="UTF-8"?>
<Params>
    <Format>csv</Format>
    <Compress>no</Compress>
    <Lang>hu</Lang>
</Params>
"""

    try:
        response = requests.post(
            DOWNLOAD_URL,
            data=request_xml,
            headers=headers,
            timeout=600
        )
        response.raise_for_status()

        root = ET.fromstring(response.text)
        url_node = root.find("Url")

        if url_node is None or not (url_node.text or "").strip():
            print("Nem található Url mező az UNAS válaszban.")
            print(response.text[:1000])
            return None

        file_url = url_node.text.strip()
        print(f"Lekért adatbázis URL: {file_url}")
        return file_url

    except requests.exceptions.RequestException as e:
        print(f"Hiba az adatbázis letöltési URL lekérése során: {e}")
        return None
    except ET.ParseError as e:
        print(f"Hiba az UNAS XML válasz feldolgozása során: {e}")
        return None


def download_unas_database(file_url):
    if not file_url:
        print("Nem található letöltési URL.")
        return

    try:
        response = requests.get(file_url, timeout=600)
        response.raise_for_status()

        output_path = BACKUP_FOLDER / "unas_backup.csv"

        with open(output_path, "wb") as file:
            file.write(response.content)

        print(f"Sikeres letöltés: {output_path}")

    except requests.exceptions.RequestException as e:
        print(f"Hiba az adatbázis letöltése során: {e}")


if __name__ == "__main__":
    try:
        token = load_token()
        file_url = request_unas_database(token)
        download_unas_database(file_url)
    except Exception as e:
        print(f"Váratlan hiba: {e}")