"""Read-only portfolio report. Never purchases or renews domains."""
import argparse
import json
import os
from datetime import datetime, timezone
from pathlib import Path
import httpx

def review(payload, now):
    rows = []
    for item in payload['domains']:
        expiry = item.get('expires_at')
        days = None
        if expiry:
            parsed = datetime.fromisoformat(expiry.replace('Z', '+00:00'))
            if parsed.tzinfo is None:
                parsed = parsed.replace(tzinfo=timezone.utc)
            days = (parsed - now).days
        rows.append({'domain': item['domain'], 'expires_at': expiry,
                     'days_remaining': days, 'needs_review': days is None or days <= 60})
    return sorted(rows, key=lambda r: (r['days_remaining'] is not None, r['days_remaining'] or 0, r['domain']))

def main():
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument('--fixture', type=Path, help='Read a local fixture instead of calling the API')
    args = parser.parse_args()
    if args.fixture:
        payload = json.loads(args.fixture.read_text())
    else:
        token = os.environ['AIVIKINGS_TOKEN']
        with httpx.Client(timeout=30) as client:
            response = client.get('https://api.aivikings.ai/v1/domains', headers={'Authorization': f'Bearer {token}'})
            response.raise_for_status()
            payload = response.json()
    print(json.dumps(review(payload, datetime.now(timezone.utc)), indent=2))

if __name__ == '__main__':
    main()
