#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import sys
import json

def generuj_wiersze_ogolne(wezel, wiersze, poziom=1, intensywnosc=40):
    """
    Funkcja do generowania wierszy dla wymagań ogólnych.
    """
    nr = wezel.get("nr", "")
    opis = wezel.get("opis", "")
    punkty = wezel.get("atrybuty", {}).get("punkty", "")

    # Wcięcie w LaTeX-u (np. 0.5 em na poziom) zależnie od poziomu
    wciecie = r"\hspace{" + f"{0.5 * poziom}em" + "}"  # 0.5em na poziom

    # Kolorowanie dla wymagań ogólnych
    kolor = f"\\cellcolor{{green!{intensywnosc}}}"  # Kolor dla Wymagań Ogólnych

    # Tworzymy wiersz:
    # [wcięcie + nr] & [wcięcie + opis] & [wcięcie + punkty] \\
    linia = f"{kolor}{wciecie}{nr} & {kolor}{wciecie}{opis} & {kolor}{wciecie}{punkty} \\\\"
    wiersze.append(linia)

    # Rekurencja dla dzieci
    for dziecko in wezel.get("wymagania", []):
        generuj_wiersze_ogolne(dziecko, wiersze, poziom + 1, intensywnosc - 20)

def generuj_wiersze_szczegolowe(wezel, wiersze, poziom=0):
    """
    Funkcja do generowania wierszy dla wymagań szczegółowych.
    """
    nr = wezel.get("nr", "")
    opis = wezel.get("opis", "")
    punkty = wezel.get("atrybuty", {}).get("punkty", "")

    # Wcięcie w LaTeX-u (np. 0.5 em na poziom) zależnie od poziomu
    wciecie = r"\hspace{" + f"{0.5 * poziom}em" + "}"  # 0.5em na poziom

    # Tworzymy wiersz:
    # [wcięcie + nr] & [wcięcie + opis] & [wcięcie + punkty] \\
    linia = f"{wciecie}{nr} & {wciecie}{opis} & {wciecie}{punkty} \\\\"
    wiersze.append(linia)

    # Rekurencja dla dzieci
    for dziecko in wezel.get("uczen", []):
        generuj_wiersze_szczegolowe(dziecko, wiersze, poziom + 1)

def main():
    if len(sys.argv) < 3:
        print("Użycie: skrypt.py plik_wejściowy.json plik_wyjściowy.tex")
        sys.exit(1)

    plik_json = sys.argv[1]
    plik_tekstowy = sys.argv[2]

    # 1. Wczytanie danych JSON z pliku
    with open(plik_json, 'r', encoding='utf-8') as f:
        dane = json.load(f)

    # 2. Bufor na wszystkie wiersze LaTeX
    wiersze = []

    # --- Nagłówek dla LaTeX ---
    wiersze.append(r"\documentclass{article}")
    wiersze.append(r"\usepackage[utf8]{inputenc}")  # Obsługa polskich znaków
    wiersze.append(r"\usepackage[T1]{fontenc}")     # Poprawne wyświetlanie polskich znaków
    wiersze.append(r"\usepackage[polish]{babel}")   # Polska lokalizacja
    wiersze.append(r"\usepackage{longtable}")
    wiersze.append(r"\usepackage{array}")
    wiersze.append(r"\usepackage{geometry}")
    wiersze.append(r"\usepackage[table]{xcolor}")   # Dodanie pakietu xcolor do kolorowania komórek
    wiersze.append(r"\geometry{a4paper, landscape, margin=1in}")  # Format A4 poziomo
    wiersze.append(r"\begin{document}")

    # --- Tytuł i nagłówek tabeli ---
    wiersze.append(r"\title{Lista wymagań}")
    wiersze.append(r"\author{}")
    wiersze.append(r"\date{}")
    wiersze.append(r"\maketitle")

    # Dostosowanie szerokości kolumn do 0.1, 0.74 i 0.1 textwidth
    wiersze.append(r"\begin{longtable}{|p{0.1\textwidth}|p{0.74\textwidth}|p{0.1\textwidth}|}")
    wiersze.append(r"\caption{Lista wymagań ogólnych}\\")
    wiersze.append(r"\hline")
    wiersze.append(r"\textbf{Nr} & \textbf{Opis} & \textbf{Punkty} \\")
    wiersze.append(r"\hline")
    # firsthead -> co ma się powtórzyć na kolejnej stronie tabeli
    wiersze.append(r"\endfirsthead")
    wiersze.append(r"\hline")
    wiersze.append(r"\textbf{Nr} & \textbf{Opis} & \textbf{Punkty} \\")
    wiersze.append(r"\hline")
    wiersze.append(r"\endhead")

    # 3. Generowanie wierszy tabeli na podstawie JSON-a
    # Wymagania ogólne
    wiersze.append(r"\hline")
    wiersze.append(r"\cellcolor{green!60}\hspace{0.0em}- & \cellcolor{green!60}\hspace{0.0em}Wymagania ogólne & \cellcolor{green!60}\hspace{0.0em}- \\")
    wiersze.append(r"\hline")
    for element in dane.get("wymagania_ogolne", []):
        generuj_wiersze_ogolne(element, wiersze)
        wiersze.append(r"\hline")  # Dodanie linii odcinającej po każdej sekcji

    # 4. Zakończenie longtable
    wiersze.append(r"\hline")
    wiersze.append(r"\end{longtable}")
    wiersze.append(r"\end{document}")

    # 5. Zapis do pliku .tex (z polskimi znakami w UTF-8)
    with open(plik_tekstowy, 'w', encoding='utf-8') as f:
        f.write("\n".join(wiersze) + "\n")


if __name__ == "__main__":
    main()
