import socket

import compLib.CompLib_pb2 as CompLib_pb2

UNIX_SOCKET_PATH = "/tmp/compLib"
TCP_SOCKET_HOST = "192.168.0.151"
TCP_SOCKET_PORT = 9090


class CompLibClient(object):

    @staticmethod
    def send(data: bytes, size: int) -> bytes:
        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
            sock.connect((TCP_SOCKET_HOST, TCP_SOCKET_PORT))

            # with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as sock:
            #     sock.connect(UNIX_SOCKET_PATH)

            sock.sendall(size.to_bytes(1, byteorder='big'))
            sock.sendall(data)

            response_size_bytes = sock.recv(1)
            response_size = int.from_bytes(response_size_bytes, byteorder="big")
            # print(response_size)

            response_bytes = sock.recv(response_size)
            # print(response_bytes.hex())
            # print(len(response_bytes))

            CompLibClient.check_response(response_bytes)

            return response_bytes

    @staticmethod
    def check_response(response_bytes: bytes) -> bool:
        print(f"{response_bytes}")
        res = CompLib_pb2.GenericResponse()
        res.ParseFromString(response_bytes)

        if res.status.successful:
            return True

        # TODO: Log error message if unsuccessful
        return False
