#! /usr/bin/python3
""" One connection JSON echo
"""
import socket
import sys
import json

def echo_json(json_socket):
    """Echo some JSON
    """
    in_stream = json_socket.makefile("r")
    out_stream = json_socket.makefile("w")
    # such a hack.... Keep going until it fails
    try:
        while True:
            json_line = in_stream.readline().strip()
            print("Input line --> {0}".format(json_line))
            receive_object = json.loads(json_line)
            print("Object --> {0}".format(receive_object))
            reply_line = json.dumps(receive_object)
            out_stream.write("{0}\r\n".format(reply_line))
            out_stream.flush()
    except Exception:
        # You'll get here on end-of-connection
        pass
    in_stream.close()
    out_stream.close()
    # This will close the client socket
    json_socket.close()
    return 0

def echo_json_server(json_port):
    echo_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        echo_socket.bind(("", json_port))
    except socket.error as message:
        print("Unable to open port {} : {}".format(json_port, message))
        return 1
    echo_socket.listen(1)
    connected_socket, address_socket = echo_socket.accept()
    print("Connected to {}\n".format(address_socket))
    echo_json(connected_socket)
    # This will close the server socket
    echo_socket.close()
    return 0

if __name__ == "__main__":
    if len(sys.argv) <= 1:
        remote_port = 3210
    else:
        try:
            remote_port = int(sys.argv[1])
        except ValueError:
            print("Invalid port number: {0}".format(sys.argv[1]))
            sys.exit(2)
    print("opening {0}".format(remote_port))
    server_rc = echo_json_server(remote_port)
    sys.exit(server_rc)
