import jwt
import time
import os
import requests
import sys

key_id = os.environ.get("APPSTORE_API_KEY_ID")
if key_id is None:
    print("Error: APPSTORE_API_KEY_ID environment variable is not set.")
    exit(1)
issuer_id = os.environ.get("APPSTORE_API_ISSUER_ID")
if issuer_id is None:
    print("Error: APPSTORE_API_ISSUER_ID environment variable is not set.")
    exit(1)
private_key = os.environ.get("APPSTORE_API_KEY")
if private_key is None:
    print("Error: APPSTORE_API_KEY environment variable is not set.")
    exit(1)
app_id = os.environ.get("APPSTORE_APP_ID")
if app_id is None:
    print("Error: APPSTORE_APP_ID environment variable is not set.")
    exit(1)


issue_time = int(time.time())
expiration_time = int(time.time()) + 5 * 60

header = {
    "alg": "ES256",
    "kid": key_id,
    "typ": "JWT"
}
payload = {
    "iss": issuer_id,
    "iat": issue_time,
    "exp": expiration_time,
    "aud": "appstoreconnect-v1" 
}

token = jwt.encode(payload, private_key, algorithm="ES256", headers=header)
url = f"https://api.appstoreconnect.apple.com/v1/builds?filter[expired]=false&filter[app]={app_id}&sort=-uploadedDate"

response = requests.get(url, headers={'Authorization': f'Bearer {token}'})
if response.status_code == 200:
    data = response.json()
    if "data" in data and len(data["data"]) > 0:
        bundle_code = int(data["data"][0]["attributes"]["version"])
        print(bundle_code+1)
    else:
        print("No bundle code found.", file=sys.stderr)
        exit(1)
else:
    print(f"Error: {response.status_code} - {response.text}", file=sys.stderr)
    exit(1)