#!/usr/bin/env python3

import argparse
import sys
import os


# if script's parent directory isn't in sys.path, then add it
if ('/'.join(sys.path[0].split("/")[:-1]) not in sys.path):
    sys.path.append('/'.join(sys.path[0].split("/")[:-1]))

from apsdk import dmclient
from apsdk import apenv


def main(cmd, payload='', use_certs=True, cluster=''):
    dm_client = dmclient.DMClient(apenv._get_secure_dm_gateway_url(cluster), use_certs)

    resp = dm_client.send_request(cmd, payload)

    print("DM Reply :\n", resp.text)


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description="Send a command to AP Device Manager.")
    parser.add_argument("-C", "--cluster", metavar="CLUSTER", help="cluster whose DM server to be contacted (can be empty, if not provided, the Cluster in autopilot.ini will be used)")
    parser.add_argument("-c", "--command", metavar="COMMAND", help="command to send to server (can not be empty)")
    parser.add_argument("-i", "--uploadfile", metavar="FILE", help="file to upload to the server")
    parser.add_argument("-n", "--not_use_certs", help='not use certs to contact DM server', action="store_true")

    args = parser.parse_args()

    if (args.command):
        dm_cmd = args.command
    else:
        parser.error("You must specify a command to send to AP Device Manager")

    if (args.uploadfile):
        if (os.path.isfile(args.uploadfile)):
            with open(args.uploadfile, 'r', newline=None) as payload_file:
                payload = payload_file.read()
        else:
            parser.error("Upload File not found at: " + args.uploadfile)
    else:
        payload = ''

    if (args.cluster):
        cluster = args.cluster
    else:
        cluster = ''

    main(dm_cmd, payload, not args.not_use_certs, cluster)
