#!/usr/bin/env python3

import serial
import sys
import time

# ========================= CONFIGURAZIONE =========================
SERIAL_PORT = '/dev/ttyUSB0'
BAUD_RATE = 115200

def main():
    try:
        # Configurazione porta seriale
        ser = serial.Serial(
            port=SERIAL_PORT,
            baudrate=BAUD_RATE,
            bytesize=serial.EIGHTBITS,
            parity=serial.PARITY_NONE,
            stopbits=serial.STOPBITS_ONE,
            timeout=0.1,           # timeout basso per reattività
            xonxoff=False,
            rtscts=False,
            dsrdtr=False
        )

        print(f"✅ Connesso a {SERIAL_PORT} | {BAUD_RATE} 8N1")
        print("   Terminale VT100/ANSI abilitato")
        print("   Premi Ctrl+C per uscire\n")
        
        # Pulizia buffer
        ser.reset_input_buffer()

        while True:
            if ser.in_waiting > 0:
                # Legge tutti i dati disponibili
                data = ser.read(ser.in_waiting)
                
                # Scrive i dati direttamente sul terminale (mantiene tutti i codici VT100)
                sys.stdout.buffer.write(data)
                sys.stdout.buffer.flush()   # Importante per aggiornamento immediato

            time.sleep(0.005)  # Piccolo delay per bassa latenza

    except serial.SerialException as e:
        print(f"\n❌ Errore porta seriale: {e}")
        print("Verifica che il dispositivo sia collegato e che tu abbia i permessi.")

    except KeyboardInterrupt:
        print("\n\n👋 Programma terminato.")

    except Exception as e:
        print(f"\n❌ Errore: {e}")

    finally:
        if 'ser' in locals() and ser.is_open:
            ser.close()
            print("Porta seriale chiusa.")


if __name__ == "__main__":
    # Abilita modalità raw del terminale per migliore compatibilità VT100
    try:
        import termios
        import tty
        old_settings = termios.tcgetattr(sys.stdin)
        tty.setcbreak(sys.stdin.fileno())
    except:
        pass

    try:
        main()
    finally:
        # Ripristina impostazioni terminale
        try:
            termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old_settings)
        except:
            pass
