import json
import pathlib
import requests
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-b', '--base', type=str, required=True)
parser.add_argument('-d', '--directory', type=str, required=True)
parser.add_argument('-o', '--output', type=str, required=True)
parser.add_argument('-s', '--story', type=str, required=True)
parser.add_argument('-u', '--username', type=str, required=True)
parser.add_argument('-p', '--password', type=str, required=True)
args = parser.parse_args()

filename = 'deployment.xml'
session = requests.Session()
session.auth = (args.username, args.password)
response = session.get(str(args.base) + '/rest/api/3/issue/' + str(args.story) + '?fields=attachment')
if response.status_code != 200:
    print('Error response ' + str(response.status_code) + ' looking up story ' + args.story)
    raise SystemExit(1)

contentUri = None
data = json.loads(response.content)
fields = data["fields"]
attachment = fields["attachment"]
for item in attachment:
    if item['filename'] == filename:
        contentUri = item['content']
        break

if contentUri is None:
    print('Error response failed to locate content for file ' + filename)
    raise SystemExit(1)

pathlib.Path(args.directory).mkdir(parents=True, exist_ok=True)
response = session.get(contentUri)
if response.status_code != 200:
    print('Error response ' + str(response.status_code) + ' looking up content for file ' + filename)
    raise SystemExit()

with open(pathlib.Path(args.directory).joinpath(args.output), 'wb') as f:
    f.write(response.content)
