#!/opt/agent/hermes-agent/venv/bin/python3
"""Reconcile deterministic a2y duties through Hermes' native cron API."""

import sys
from pathlib import Path

import yaml


def reconcile(desired, existing, *, create, update, remove) -> None:
    """Make managed native jobs equal the declarative duty list."""
    existing = {job.get("name"): job for job in existing}
    desired_names = {duty["name"] for duty in desired}
    for job in existing.values():
        if (job.get("origin") or {}).get("platform") == "a2y-duty" and job.get("name") not in desired_names:
            remove(job["id"])
    for duty in desired:
        current = existing.get(duty["name"])
        if current:
            if (current.get("origin") or {}).get("platform") != "a2y-duty":
                raise RuntimeError(f"duty name {duty['name']!r} collides with an unmanaged Hermes cron job")
            update(
                current["id"],
                {
                    "prompt": duty["prompt"],
                    "schedule": duty["schedule"],
                    "deliver": duty["deliver"],
                    "enabled": True,
                    "state": "scheduled",
                    "paused_at": None,
                    "paused_reason": None,
                },
            )
        else:
            create(
                prompt=duty["prompt"],
                schedule=duty["schedule"],
                name=duty["name"],
                deliver=duty["deliver"],
                origin={"platform": "a2y-duty", "name": duty["name"]},
            )


def main() -> int:
    from cron.jobs import create_job, list_jobs, remove_job, update_job

    desired = (yaml.safe_load(Path(sys.argv[1]).read_text()) or {}).get("duties") or []
    reconcile(
        desired,
        list_jobs(include_disabled=True),
        create=create_job,
        update=update_job,
        remove=remove_job,
    )
    return 0


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