#!/usr/bin/env python3
"""Helper for GHL Social Planner API calls."""
import json, sys, urllib.request, urllib.error

TOKENS_FILE = '/root/.hermes/secrets/ghl-oauth.json'
BASE = 'https://services.leadconnectorhq.com/social-media-posting'
VERSION = '2021-07-28'

def agency_token():
    d = json.load(open(TOKENS_FILE))
    return d['tokens']['agency:e4QT67gW4Bz6yO6r7Teu']['access_token']

def call(method, path, payload=None, token=None):
    tok = token or agency_token()
    url = f'{BASE}/{path}'
    data = json.dumps(payload).encode() if payload is not None else None
    req = urllib.request.Request(url, data=data, method=method)
    req.add_header('Authorization', f'Bearer {tok}')
    req.add_header('Version', VERSION)
    req.add_header('Content-Type', 'application/json')
    try:
        with urllib.request.urlopen(req, timeout=30) as r:
            return r.status, json.loads(r.read().decode())
    except urllib.error.HTTPError as e:
        body = e.read().decode()
        try:
            return e.code, json.loads(body)
        except Exception:
            return e.code, {'raw': body}

if __name__ == '__main__':
    cmd = sys.argv[1]
    if cmd == 'accounts':
        loc = sys.argv[2]
        status, resp = call('GET', f'{loc}/accounts')
        print(status)
        print(json.dumps(resp, indent=2))
    elif cmd == 'list':
        loc = sys.argv[2]
        limit = sys.argv[3] if len(sys.argv) > 3 else '10'
        status, resp = call('POST', f'{loc}/posts/list', {'limit': limit})
        print(status)
        print(json.dumps(resp, indent=2))
