import socket
import threading
from tkinter import messagebox

class Chat:
    def __init__(self, server='127.0.0.1' , port=3333): #192.168.120.106
        self.server = server
        self.port = port
        self.client_socket = None
        self.connected = False
        self.mensajes_recibidos = []

    def conectar_al_servidor(self):
        """Conectar al servidor de chat."""
        try:
            self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            self.client_socket.connect((self.server, self.port))
            self.connected = True
            print("Conectado al servidor de chat.")
            self.escuchar_mensajes()
        except Exception as e:
            messagebox.showerror("ERROR", f"Error, no se pudo conectar al servidor: {e}")
            self.connected = False

    def enviar_mensaje(self, mensaje):
        """Enviar un mensaje al servidor."""
        if not self.connected:
            messagebox.showerror("ERROR", "No estas conectado al servidor")
        try:
            self.client_socket.send(mensaje.encode('utf-8'))
            print("Mensaje Enviado")
        except Exception as e:
            messagebox.showerror("ERROR",f"Error al enviar el mensaje: {e}")

    def escuchar_mensajes(self):
        """Escucha mensajes entrantes desde el servidor."""
        def recibir():
            while self.connected:
                try:
                    mensaje = self.client_socket.recv(1024)
                    if mensaje:
                        mensaje_decodificado = mensaje.decode('utf-8')
                        self.mensajes_recibidos.append(mensaje_decodificado)
                        print(f"Mensaje recibido: {mensaje_decodificado}")
                    else:
                        print("El servidor cerró la conexión.")
                        self.connected = False
                        break
                except Exception as e:
                    print(f"Error al recibir mensajes: {e}")
                    self.connected = False
                    break

        print("Iniciando escucha de mensajes...")
        thread = threading.Thread(target=recibir, daemon=True)
        thread.start()
