import socket

def enviaTroballa(s, troballa):
    """:param s: punt connexió on enviar
       :param troballa: tuple (n_nius, ocell, zona)
    
       :returns: nombre de bytes enviats de la troballa.
    
        envia la troballa com un :py:class:`str` amb els valors de la tuple separats per coma
    """
    n_nius, ocell, zona = troballa
    aenv = '({}, {}, {})'.format(n_nius, ocell, zona)
    enviats = s.send(bytes(aenv,'utf-8'))
    if enviats == 0:
        raise RuntimeError("connexió malmesa")
    return enviats

def repTroballa(s):
    """:param socket s: punt de connexió on es rep la troballa.
       :returns: una troballa o None.

       rep una seqüència de bytes representant la tuple `troballa` o el 
       caràcter :py:code`''` Si rep aquest darrer retornarà None (indicant Fi 
       de transmissió de dades)

    """
    c = s.recv(1)
    if c == b'(':
        stuple = bytes()
        c = s.recv(1)
        while c!=b')':
            stuple += c
            c = s.recv(1)
        stuple = stuple.decode('utf-8')
        n_nius, ocell, zona = stuple.split(',')
        n_nius = int(n_nius)
        ocell = ocell.strip()
        zona = zona.strip()
        r =  n_nius, ocell, zona
    elif c==b'':
        r = None
    else:
        raise RuntimeError("recepció malmesa: "+c.decode('utf-8'))
    return r

def enviaOK(PtConn):
    enviats = PtConn.send('*'.encode())
    if enviats == 0:
        raise RuntimeError("connexió malmesa")


def repOK(PtConn):
    c = PtConn.recv(1).decode()
    return c == '*'
