#!/bin/bash
# telegrammer-init — Send startup commands to a Claude Code screen session
# and optionally configure Telegram access.json.
#
# Usage: telegrammer-init --session cld-telegram --config telegram-master.yaml
#
# Requires: yq (or python3 with PyYAML as fallback)

set -euo pipefail

SESSION=""
CONFIG=""

usage() {
    echo "Usage: telegrammer-init --session <screen-session> --config <yaml-config>"
    echo ""
    echo "Options:"
    echo "  --session  Screen session name to send commands to"
    echo "  --config   YAML config file with startup_commands and telegram sections"
    echo "  --help     Show this help message"
    exit "${1:-0}"
}

while [[ $# -gt 0 ]]; do
    case "$1" in
        --session) SESSION="$2"; shift 2 ;;
        --config)  CONFIG="$2";  shift 2 ;;
        --help)    usage 0 ;;
        *)         echo "Unknown option: $1"; usage 1 ;;
    esac
done

if [[ -z "$SESSION" || -z "$CONFIG" ]]; then
    echo "Error: --session and --config are required."
    usage 1
fi

if [[ ! -f "$CONFIG" ]]; then
    echo "Error: Config file not found: $CONFIG"
    exit 1
fi

# Use python3 to parse YAML (always available in our environment)
parse_yaml() {
    python3 -c "
import sys, yaml, json

with open('$CONFIG') as f:
    raw = yaml.safe_load(f)

spec = raw.get('spec', {})
result = {
    'startup_commands': spec.get('startup_commands', []) or [],
    'telegram': spec.get('telegram', {}) or {},
}
print(json.dumps(result))
"
}

PARSED=$(parse_yaml)

# Setup Telegram access.json if configured
AUTO_CONNECT=$(echo "$PARSED" | python3 -c "import sys,json; d=json.load(sys.stdin); print(str(d.get('telegram',{}).get('auto_connect',True)).lower())")
ALLOWED_USERS=$(echo "$PARSED" | python3 -c "import sys,json; d=json.load(sys.stdin); users=d.get('telegram',{}).get('allowed_users',[]); print(json.dumps(users))")

if [[ "$AUTO_CONNECT" == "true" && "$ALLOWED_USERS" != "[]" ]]; then
    ACCESS_DIR="${TELEGRAM_STATE_DIR:-$HOME/.scitex/agent-container/telegram}"
    mkdir -p "$ACCESS_DIR"
    python3 -c "
import json
users = json.loads('$ALLOWED_USERS')
data = {'dmPolicy': 'allowlist', 'allowFrom': [str(u) for u in users]}
with open('$ACCESS_DIR/access.json', 'w') as f:
    json.dump(data, f, indent=2)
    f.write('\n')
print('Wrote access.json with', len(users), 'allowed users')
"
fi

# Send startup commands with delays
NUM_COMMANDS=$(echo "$PARSED" | python3 -c "import sys,json; d=json.load(sys.stdin); print(len(d.get('startup_commands',[])))")

if [[ "$NUM_COMMANDS" -gt 0 ]]; then
    echo "Sending $NUM_COMMANDS startup command(s) to session: $SESSION"

    echo "$PARSED" | python3 -c "
import sys, json
d = json.load(sys.stdin)
for cmd in d.get('startup_commands', []):
    delay = cmd.get('delay', 0)
    command = cmd.get('command', '')
    if command:
        print(f'{delay}\t{command}')
" | while IFS=$'\t' read -r delay command; do
        if [[ "$delay" -gt 0 ]]; then
            echo "  Waiting ${delay}s before sending: $command"
            sleep "$delay"
        fi
        screen -S "$SESSION" -X stuff "${command}\r"
        echo "  Sent: $command"
    done
fi

echo "telegrammer-init complete."
