import json
import urllib
from urllib import request, parse
import random
from requests_toolbelt.multipart.encoder import MultipartEncoder

server_address = "http://127.0.0.1:8188"

def queue_prompt(prompt):
    p = {"prompt": prompt}
    data = json.dumps(p).encode('utf-8')
    req =  request.Request(server_address + "/prompt", data=data)
    request.urlopen(req)

def upload_image(input_path, name, server_address, image_type="input", overwrite=False):
  with open(input_path, 'rb') as file:
    multipart_data = MultipartEncoder(
      fields= {
        'image': (name, file, 'image/png'),
        'type': image_type,
        'overwrite': str(overwrite).lower()
      }
    )

    data = multipart_data
    headers = { 'Content-Type': multipart_data.content_type }
    request = urllib.request.Request("http://{}/upload/image".format(server_address), data=data, headers=headers)
    with urllib.request.urlopen(request) as response:
      return response.read()


def gen_image(openpose_image_path):

    # read fencerAPI.json into prompt_text
    with open("fencerAPI.json", "r") as f:
        prompt_json = f.read()
        prompt = json.loads(prompt_json)

        # upload images        
        upload_image("ref_black.png", "ref_black.png", server_address)
        upload_image(openpose_image_path, "openpose_image.png", server_address)

        prompt["3"]["inputs"]["seed"] = random.randint(0, 10000000000)
        prompt["29"]["inputs"]['image'] = "ref_black.png"
        prompt["17"]["inputs"]['image'] = "openpose_image.png"

        queue_prompt(prompt)


