#!/usr/bin/env python3
"""Seed reference single-app and multi-app Agent Profile v1 records."""

from __future__ import annotations

import json
import sys
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(BASE_DIR))
loaded_platform = sys.modules.get("platform")
if loaded_platform is not None and not hasattr(loaded_platform, "__path__"):
    del sys.modules["platform"]

from sqlalchemy import select

from config.control_plane import get_control_plane_session
from bridge_platform.agents.profiles import AgentProfileContract
from bridge_platform.tenants.models import AgentProfile, Tenant


PROFILES = (
    AgentProfileContract(
        agent_key="abn_assistant",
        name="ABN Assistant",
        version="1.0.0",
        instructions_version="1.0.0",
        description="Read-only assistant limited to Australian ABN lookup.",
        allowed_capabilities=("business.au.abn.lookup",),
        confirmation_policy={"read": "never", "write_irreversible": "always"},
        max_steps=1,
        monthly_token_limit=25000,
    ),
    AgentProfileContract(
        agent_key="operations_assistant",
        name="Operations Assistant",
        version="1.0.0",
        instructions_version="1.0.0",
        description="Multi-app operations profile that grows as subscribed tools become agent-ready.",
        allowed_capabilities=(
            "business.au.abn.lookup",
            "invoice.document.extract",
            "invoice.supplier.read",
            "aroflo.task.search",
            "aroflo.invoice.create",
        ),
        confirmation_policy={
            "read": "never",
            "calculate": "never",
            "write_reversible": "policy",
            "write_irreversible": "always",
        },
        max_steps=8,
        monthly_token_limit=100000,
    ),
)


def main() -> int:
    for profile in PROFILES:
        errors = profile.validate()
        if errors:
            raise SystemExit("Invalid profile: " + "; ".join(errors))
    with get_control_plane_session() as session:
        if session.get(Tenant, "absolutems") is None:
            raise SystemExit("Tenant absolutems does not exist")
        for profile in PROFILES:
            record = session.execute(select(AgentProfile).where(
                AgentProfile.tenant_id == "absolutems",
                AgentProfile.agent_key == profile.agent_key,
            )).scalar_one_or_none()
            if record is None:
                record = AgentProfile(tenant_id="absolutems", agent_key=profile.agent_key)
                session.add(record)
            record.display_name = profile.name
            record.description = profile.description
            record.profile_version = profile.version
            record.instructions_version = profile.instructions_version
            record.status = "active"
            record.allowed_capabilities_json = list(profile.allowed_capabilities)
            record.allowed_roles_json = list(profile.allowed_roles)
            record.confirmation_policy_json = dict(profile.confirmation_policy)
            record.limits_json = {
                "max_steps": profile.max_steps,
                "monthly_token_limit": profile.monthly_token_limit,
            }
            record.metadata_json = {"seed": "agent_profile_v1"}
        session.commit()
    print(json.dumps({"status": "ok", "profiles": [item.agent_key for item in PROFILES]}))
    return 0


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