#!/usr/bin/env python3
"""Send a freshly signed illustrative event to the local reference receiver."""
import argparse
import hashlib
import hmac
import json
import os
import urllib.request
import urllib.error
from datetime import datetime, timezone
from pathlib import Path
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('--replay', action='store_true')
parser.add_argument('--port', type=int, default=8788)
args = parser.parse_args()
secret = os.environ['AGENTOWL_SIGNING_SECRET']
event = json.loads((Path(__file__).parent / 'fixtures/email.json').read_text())
if args.replay:
    event['event_id'] = 'evt_procurement_replay'
event_id = event['event_id']
raw = json.dumps(event).encode()
timestamp = datetime.now(timezone.utc).isoformat(timespec='milliseconds').replace('+00:00', 'Z')
signature = 'v2=' + hmac.new(secret.encode(), timestamp.encode() + b'.' + raw, hashlib.sha256).hexdigest()
request = urllib.request.Request(f'http://127.0.0.1:{args.port}/events', data=raw, headers={
    'Content-Type': 'application/json', 'X-AgentOwl-Timestamp': timestamp,
    'X-AgentOwl-Signature': signature, 'X-AgentOwl-Idempotency-Key': event_id + ':ep_demo'})
try:
    with urllib.request.urlopen(request, timeout=10) as response:
        print(f'{response.status} accepted {event_id}')
except urllib.error.HTTPError as error:
    print(f'{error.code} rejected {event_id}')
    raise SystemExit(1)
