#!/usr/bin/env python3
import json
import pathlib
import socket
import time

SOCKET = '/run/aios-governance-executor/executor.sock'
STATE = pathlib.Path('/var/lib/aios-gitops/governance-executor/drift-monitor.json')
APPROVED = pathlib.Path('/var/lib/aios-gitops/runtime/tasks/AIOS-PROTECTION-SNAPSHOT-DRIFT-FORENSICS-V1/protection-drift/semantic-analysis.json')


def call():
    sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
    sock.settimeout(20)
    sock.connect(SOCKET)
    request = {'operation': 'GET_BRANCH_PROTECTION', 'payload': {'repository': 'aios/aios', 'branch': 'main'}}
    sock.sendall((json.dumps(request, separators=(',', ':')) + '\n').encode())
    chunks = []
    while True:
        part = sock.recv(1024 * 1024)
        if not part:
            break
        chunks.append(part)
        if b'\n' in part:
            break
    sock.close()
    return json.loads(b''.join(chunks).splitlines()[0])


def main():
    try:
        result = call()
        if result.get('status') != 'PASS':
            raise RuntimeError(str(result.get('code') or 'EXECUTOR_GET_FAILED'))
        approved = json.loads(APPROVED.read_text(encoding='utf-8'))
        approved_transport = approved['approved_transport_digest_from_evidence']
        approved_semantic = approved['approved_semantic_digest']
        transport = result['transport_digest']
        semantic = result['semantic_digest']
        if semantic != approved_semantic:
            state = 'GOVERNANCE_POLICY_DRIFT'
        elif transport != approved_transport:
            state = 'GOVERNANCE_TRANSPORT_METADATA_CHANGED'
        else:
            state = 'NO_DRIFT'
        payload = {
            'schema': 'aios.governance-drift-monitor.v1',
            'observed_at_unix': int(time.time()),
            'status': state,
            'release_blocking': False,
            'approved_transport_digest': approved_transport,
            'observed_transport_digest': transport,
            'approved_semantic_digest': approved_semantic,
            'observed_semantic_digest': semantic,
            'semantic_schema': result.get('semantic_schema'),
            'source': 'Dedicated Governance Executor GET_BRANCH_PROTECTION',
        }
    except Exception as exc:
        payload = {
            'schema': 'aios.governance-drift-monitor.v1',
            'observed_at_unix': int(time.time()),
            'status': 'MONITOR_UNAVAILABLE',
            'release_blocking': False,
            'error_code': str(exc),
        }
    STATE.parent.mkdir(parents=True, exist_ok=True)
    temporary = STATE.with_suffix('.tmp')
    temporary.write_text(json.dumps(payload, sort_keys=True, separators=(',', ':'), ensure_ascii=False) + '\n', encoding='utf-8')
    temporary.replace(STATE)
    STATE.chmod(0o640)
    print(json.dumps(payload, sort_keys=True, separators=(',', ':'), ensure_ascii=False))


if __name__ == '__main__':
    main()
