#!/usr/bin/env python3

import requests, sys, re

# Space-Track account credentials
username = 'xxx'
password = 'xxx'

if len(sys.argv)<2:
    print("Usage: getTLE.py <NORADID< [<NORADID> ...]")
    sys.exit(1)

NoradIDs = sys.argv
NoradIDs.pop(0)

for i, id in enumerate(NoradIDs):
    if not id.isdigit:
        print(f"Error {id} is not an integer")
        sys.exit(1)
#    NoradIDs[i] = int(id)


# Space-Track API URL for TLE query
base_url = 'https://www.space-track.org'
login_url = f'{base_url}/ajaxauth/login'


# Start a session
session = requests.Session()

# Login to Space-Track
login_response = session.post(login_url, data={'identity': username, 'password': password})
if login_response.status_code != 200:
    raise Exception('Failed to log in to Space-Track')

for id in NoradIDs:
    print(f"Trying {id}")

    #tle_query_url = f'{base_url}/basicspacedata/query/class/tle_latest/NORAD_CAT_ID/{id}/orderby/ORDINAL%20asc/format/tle'
    tle_query_url = f'{base_url}/basicspacedata/query/class/gp/NORAD_CAT_ID/{id}/format/tle/emptyresult/show'
    sat_query_url = f'{base_url}/basicspacedata/query/class/satcat/NORAD_CAT_ID/{id}/orderby/NORAD_CAT_ID/format/json'


    # Query satellite data
    sat_response = session.get(sat_query_url)
    if sat_response.status_code != 200:
        raise Exception('Failed to retrieve satellite data')

    # Parse the JSON response
    sat_data = sat_response.json()

    # Print the satellite name
    if sat_data:
        satellite_name = sat_data[0]['SATNAME']
        print(f"Satellite Name: {satellite_name}")
    else:
        print(f"No data found for NORAD ID {id}")
        continue

    # Remove any additional name and white space
    short_satellite_name = re.split(r'\(', satellite_name)[0]
    # Remove all whitespace characters
    short_satellite_name = re.sub(r'\s+', '', short_satellite_name)
    short_satellite_name = re.sub(r'/', '', short_satellite_name)

    # Query TLE data
    tle_response = session.get(tle_query_url)
    if tle_response.status_code != 200:
        raise Exception('Failed to retrieve TLE data')

    with open(short_satellite_name+'.tle', 'w') as file:
        file.write(satellite_name+"\n")
        file.write(tle_response.text)
    
    ## Print the TLE data
    #tle_data = tle_response.text
    #print(tle_data)

    
