import requests, sys, json

URL = sys.argv[1]
PROBLEM = r"""
{"Task/data":{"var":{"bk":["lo","ra","lo","lo"],"bl":[0,0,0,0],"bu":[1e+30,10,1e+30,1e+30],"type":["cont","cont","cont","cont"]},
             "con":{"bk":["fx","lo","up"],"bl":[30,15,-1e+30],"bu":[30,1e+30,25]},
             "objective":{"sense":"max","c":{"subj":[0,1,2,3],"val":[3,1,5,1]},"cfix":0},
             "A":{"subi":[1,0,2,1,0,1,0,2,1],"subj":[0,0,1,1,1,2,2,3,3],"val":[2,3,2,1,1,3,2,3,1]}}}
"""
verify = False # Whether to verify SSL certificates

with requests.Session() as s:
    p = s.post(URL + "/api/v1/submit+solve", 
               data = PROBLEM,
               headers = { "Content-Type" : "application/x-mosek-jtask", "Accept": "application/x-mosek-jtask"},
               verify = verify )
    if p.status_code != 200:
        print(f"Status {p.status_code}")
        print(p.text)
        print(p.headers)
    else:
        token = p.headers['X-Mosek-Job-Token']
        sol = json.loads(p.text)

        l = s.get(URL + "/api/v1/log", 
                  headers = { "X-Mosek-Job-Token" : token },
                  verify = verify )
        print(l.text)

        print(f"Status {p.status_code}")
        print(f"MOSEK response {p.headers['X-Mosek-Res-Code']}")

        x = sol['Task/solutions']['interior']['xx']
        print(f"Received solution:", *(f"{xi:.2f}" for xi in x))
        print(f"Expected solution: 0.00 0.00 15.00 8.33")

