#!/usr/bin/env python3

import os
from farpy_client import LEGAL_ACCEPTANCE_V1, FarpyClient, FarpyError

# Job API inspect/start accepts a farpy_agent_… key.
# Account Settings keys (farpy_…) are a different store for Public API V1.
# They are not interchangeable. Identity convergence is later work.
client = FarpyClient(os.environ.get("FARPY_AGENT_KEY") or os.environ["FARPY_API_KEY"])

print("capabilities:", client.capabilities())
print("pricing:", client.pricing())
print("limits:", client.limits())

# prepare / inspect / quote = NO SPEND. start = SPEND / reservation boundary.
try:
    prepared = client.prepare("scene.blend")
    print({
        "spend": prepared["spend"],
        "upload_id": prepared["upload_id"],
        "quote_id": prepared["quote_id"],
        "frame_start": prepared["frame_start"],
        "frame_end": prepared["frame_end"],
        "frame_count": prepared["frame_count"],
        "price_cents": prepared["price_cents"],
        "qualified_1c": prepared["qualified_1c"],
        "pricing_version": prepared["pricing_version"],
    })

    started = client.start(
        prepared["upload_id"],
        quote_id=prepared["quote_id"],
        legal_acceptance=LEGAL_ACCEPTANCE_V1,
    )
    print({"job_id": started.get("job_id"), "quote_id": started.get("quote_id"), "spend": True})

    job_id = started["job_id"]
    print("status:", client.status(job_id))
    print("download:", client.download(job_id))
    print("receipt:", client.receipt(job_id))
except FarpyError as exc:
    print({
        "status": exc.status,
        "code": exc.code,
        "message": exc.message,
        "retryable": exc.retryable,
        "suggested_action": exc.suggested_action,
        "request_id": exc.request_id,
    })
    raise
