#!/usr/bin/env python3
"""Point an agent at the tenant Ollama model (skip Aiden's built-in default).

Usage:
  python examples/models/use-tenant-llm.py \\
    --base-url https://app.stackgen.com \\
    --api-token stackgen_… \\
    --workspace-id <workspace-uuid>
"""

from __future__ import annotations

import argparse
import json
import os
import sys

from stackgen import (
    StackgenClient,
    StackgenConfig,
    create_agent,
    create_stage,
    create_workflow,
)


def main() -> int:
    p = argparse.ArgumentParser(description=__doc__)
    p.add_argument("--base-url", default=os.environ.get("STACKGEN_URL", ""))
    p.add_argument("--api-token", default=os.environ.get("STACKGEN_TOKEN", ""))
    p.add_argument("--workspace-id",
        "--org-id", default=os.environ.get("STACKGEN_WORKSPACE_ID", "") or os.environ.get("STACKGEN_PROJECT", ""))
    p.add_argument("--agent-name", default="tenant-llm-agent")
    p.add_argument("--workflow-name", default="tenant-llm-workflow")
    args = p.parse_args()
    if not args.base_url or not args.api_token:
        print(
            "Need --base-url and --api-token (or STACKGEN_URL / STACKGEN_TOKEN)",
            file=sys.stderr,
        )
        return 1

    client = StackgenClient(
        StackgenConfig(
            base_url=args.base_url,
            api_token=args.api_token,
            workspace_id=args.workspace_id,
        )
    )

    providers = client.aiden.llm.list_providers()
    resolved = client.aiden.llm.resolve_tenant_llm_model()
    provider = resolved["provider"]
    model = resolved["model"]
    model_name = str(model.get("name") or "").strip()
    if not model_name:
        print(f"resolve_tenant_llm_model returned no model name: {resolved!r}", file=sys.stderr)
        return 1

    agent = create_agent(
        name=args.agent_name,
        persona=(
            "You write a short markdown note about the topic, then stop. "
            "Do not call external systems."
        ),
        always_allowed_tools=["note"],
        auto_approve_tools=[{"tool": "note"}],
        model_names=[model_name],
    )
    stage = create_stage(
        id="note",
        agent=args.agent_name,
        description="Write a short note.",
        note="Write three short bullets about the topic, then stop.",
    )
    workflow = (
        create_workflow(
            name=args.workflow_name,
            domain="ops",
            tags=["sdk-example", "models"],
        )
        .then(stage)
        .commit()
    )
    published = client.aiden.publish_workflow(workflow, agents=[agent], approve=True)

    print(
        json.dumps(
            {
                "providers_seen": len(providers),
                "provider_name": provider.get("name"),
                "provider_type": provider.get("provider_type") or provider.get("type"),
                "model_name": model_name,
                "workflow": published.workflow_name,
                "version": published.version,
                "status": published.status,
            },
            indent=2,
        )
    )
    return 0


if __name__ == "__main__":
    raise SystemExit(main())
