#! /usr/bin/python3

import zmq
from ptcommon.ptdm_message import Message

zmq_socket = None


def main():
    try:
        connect_to_socket()
        message = get_battery_state_message()
        print_battery_state_message(message)
        cleanup()

    except Exception as e:
        print("Error getting battery info: " + str(e))

    finally:
        cleanup()


def connect_to_socket():
    global zmq_socket

    zmq_context_send = zmq.Context()
    zmq_socket = zmq_context_send.socket(zmq.REQ)
    zmq_socket.sndtimeo = 1000
    zmq_socket.rcvtimeo = 1000
    zmq_socket.connect("tcp://127.0.0.1:3782")


def send_request(message_request_id, parameters):

    message = Message.from_parts(message_request_id, parameters)
    zmq_socket.send_string(message.to_string())

    response_string = zmq_socket.recv_string()
    return Message.from_string(response_string)


def get_battery_state_message():
    message = Message.from_parts(Message.REQ_GET_BATTERY_STATE, [])
    zmq_socket.send_string(message.to_string())

    response_string = zmq_socket.recv_string()
    return Message.from_string(response_string)


def print_battery_state_message(message):
    if message.message_id() == Message.RSP_GET_BATTERY_STATE:
        if message.validate_parameters([int, int, int, int]):
            charging_state, capacity, time_remaining, wattage = message.parameters()
            print("Charging State: " + charging_state)
            print("Capacity: " + capacity)
            print("Time Remaining: " + time_remaining)
            print("Wattage: " + wattage)
        else:
            print("Unable to get valid battery information.")


def cleanup():
    if (zmq_socket is not None):
        zmq_socket.close(0)


if __name__ == "__main__":
    main()
