#!/usr/bin/env python3
"""Place a simple outbound Twilio call using API Key auth.

Reads credentials from /home/isthekid/.openclaw/secrets/twilio.env
Expected vars:
  TWILIO_ACCOUNT_SID
  TWILIO_API_KEY_SID
  TWILIO_API_KEY_SECRET
  TWILIO_FROM_NUMBER
  TWILIO_TO_NUMBER

Usage:
  python3 twilio_call.py --say "Hello" [--to +1...] [--from +1...]

NOTE: No recording is enabled here.
"""

from __future__ import annotations

import argparse
import os
from pathlib import Path


def load_env_file(path: str) -> None:
  p = Path(path)
  if not p.exists():
    raise SystemExit(f"Missing env file: {path}")
  for line in p.read_text().splitlines():
    line = line.strip()
    if not line or line.startswith('#') or '=' not in line:
      continue
    k, v = line.split('=', 1)
    os.environ.setdefault(k.strip(), v.strip())


def main() -> None:
  ap = argparse.ArgumentParser()
  ap.add_argument('--say', required=True, help='Text for Twilio <Say>')
  ap.add_argument('--to', default=None)
  ap.add_argument('--from-number', dest='from_number', default=None)
  ap.add_argument('--env-file', default='/home/isthekid/.openclaw/secrets/twilio.env')
  args = ap.parse_args()

  load_env_file(args.env_file)

  account_sid = os.environ.get('TWILIO_ACCOUNT_SID')
  api_key = os.environ.get('TWILIO_API_KEY_SID')
  api_secret = os.environ.get('TWILIO_API_KEY_SECRET')
  from_number = args.from_number or os.environ.get('TWILIO_FROM_NUMBER')
  to_number = args.to or os.environ.get('TWILIO_TO_NUMBER')

  missing = [k for k, v in {
    'TWILIO_ACCOUNT_SID': account_sid,
    'TWILIO_API_KEY_SID': api_key,
    'TWILIO_API_KEY_SECRET': api_secret,
    'from_number': from_number,
    'to_number': to_number,
  }.items() if not v]
  if missing:
    raise SystemExit(f"Missing: {', '.join(missing)}")

  # Import after env load
  from twilio.rest import Client

  client = Client(api_key, api_secret, account_sid)

  twiml = f"""<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<Response>
  <Say voice=\"alice\">{args.say}</Say>
</Response>"""

  call = client.calls.create(
    twiml=twiml,
    to=to_number,
    from_=from_number,
  )

  print(call.sid)


if __name__ == '__main__':
  main()
