# radiotransmisor.py
from transceptor import transceptor
import sys
from transceptor1262_const import ERROR

# ID del usuario
mi_id = ""

def modo_receptor():
    # Funcion de receptor.
    while True:
        try:
            # Escucha.
            msg, err = transceptor.recibir(timeout_ms=15000)
            if msg:
                # Decodificar el mensaje recibido
                mensaje_bruto = msg.decode('utf-8', 'ignore')
                
                # Parsea el mensaje para obtener el ID del emisor
                partes = mensaje_bruto.split(': ', 1)
                if len(partes) == 2:
                    emisor_id, mensaje_real = partes
                    print(f"{emisor_id}: {mensaje_real}")
                else:
                    # Si no tiene el formato 'ID: mensaje', lo muestra completo
                    print(f"[RX] ✅ Recibido: {msg}")
        except KeyboardInterrupt:
            # Interrumpir la recepción para cambiar al modo emisor
            break
        except Exception as e:
            print(f"[EXCEPCIÓN en modo_receptor] {e}")

    # Interrumpir el bucle si se presiona Ctrl+C y cambiar al modo emisor
    modo_emisor()

def modo_emisor():
    #Funcion de emisor.
    try:
        mensaje_usuario = input(f"{mi_id}: ")
    except KeyboardInterrupt:
        # Salir del programa si se presiona Ctrl+C en modo emisor
        # Enviar mensaje de desconexión antes de salir
        mensaje_desconexion = f"{mi_id}: Me desconecto, hasta luego.".encode('utf-8')
        try:
            transceptor.enviar(mensaje_desconexion)
        except Exception as e:
            print(f"[ERROR] No se pudo enviar mensaje de desconexión: {e}")
        
        print("\n[INTERRUPCIÓN] Saliendo del programa. ¡Hasta luego!")
        sys.exit(0)

    # Si se ingresó un mensaje, formatearlo e enviarlo
    if mensaje_usuario:
        mensaje_para_enviar = f"{mi_id}: {mensaje_usuario}".encode('utf-8')
        try:
            bytes_enviados, estado = transceptor.enviar(mensaje_para_enviar)
            if estado != 0:
                print(f"[TX] Error al enviar: {ERROR.get(estado, 'Desconocido')}")
        except Exception as e:
            print(f"[ERROR] Excepción al enviar: {e}")
    
    # Volver al modo recepción después de enviar o si no se escribió nada
    modo_receptor()

if __name__ == "__main__":
    print("Inicializando sistema LoRa...")
    print("Presiona Ctrl+C para enviar un mensaje.")
    print("Presiona dos veces Ctrl+C para cerrar el programa.")
    
    # Solicitar identificación del usuario
    mi_id = input("Ingresa tu identificación (nombre de usuario): ")
    
    # Enviar mensaje de conexión
    mensaje_conexion = f"{mi_id}: Estoy conectado en escucha".encode('utf-8')
    try:
        transceptor.enviar(mensaje_conexion)
    except Exception as e:
        print(f"[ERROR] No se pudo enviar mensaje de conexión: {e}")
    
    # Iniciar la aplicación en modo recepción
    print("[INFO] Modo Recepción Activado")
    modo_receptor()
    
    