import qrcode
import re

def sanitize_filename(text: str) -> str:
    # Alles außer Buchstaben, Zahlen, Bindestrich und Unterstrich wird ersetzt
    return re.sub(r'[^a-zA-Z0-9_-]', '_', text)
    
def generate_qr(data, mode, pixel, border):
    """
    QR-Code generieren abhängig vom Modus:
    - tiny: kleinste Größe, minimale Fehlerkorrektur
    - save: höchste Redundanz, maximale Fehlerkorrektur
    """
    if mode == "tiny":
        qr = qrcode.QRCode(
            version=1,  # kleinste Version
            error_correction=qrcode.constants.ERROR_CORRECT_L,  # niedrigste Fehlerkorrektur
            box_size=pixel,  # kleine Boxen
            border=border,  # kleiner Rand
        )
    elif mode == "save":
        qr = qrcode.QRCode(
            version=None,  # automatisch wählen
            error_correction=qrcode.constants.ERROR_CORRECT_H,  # höchste Fehlerkorrektur
            box_size=pixel,
            border=border,
        )
    else:
        print("Unbekannter Modus:", mode)
        return

    qr.add_data(data)
    qr.make(fit=True)

    img = qr.make_image(fill_color="black", back_color="white")
    filename = f"qr_code_{sanitize_filename(data[-3:])}.png"
    img.save(filename)
    print(f"QR-Code im Modus '{mode}' gespeichert als {filename}")


if __name__ == "__main__":
    print("QR-Code Generator")
    print("================\n")

    mode = input("Modus (tiny/save): ").strip().lower()
    data = input("Text für den QR-Code: ").strip()
    border = int(input("Border in Kacheln (z.B. 1): ").strip())
    pixel = int(input("Kachelgröße in Pixel (z.B. 10): ").strip())

    generate_qr(data, mode, pixel, border)
    
    input("Enter zum schli?en")
