#!/bin/bash
# Post a project update to the correct Discord channel
# Usage: discord-post-update.sh <project_slug> <message>
# Or: discord-post-update.sh --detect <message> (auto-detect project from content)

KITT_TOKEN="MTQ2Nzk3Njk0MTc5MjY2MTU0Ng.GwwFym.-uI-JrIsP29rokL1zK9b-XOJ3bkRi4D0wZFEVg"
MAP_FILE="/Users/assafdagan/clawd/scripts/discord-project-map.json"

PROJECT="$1"
MESSAGE="$2"

if [ "$PROJECT" = "--detect" ]; then
    # Auto-detect project from message content
    MESSAGE="$2"
    PROJECT=$(python3 -c "
import json, sys
msg = '''$MESSAGE'''.lower()
with open('$MAP_FILE') as f:
    data = json.load(f)
best = None
best_score = 0
for slug, info in data['projects'].items():
    score = sum(1 for kw in info['keywords'] if kw.lower() in msg)
    if score > best_score:
        best_score = score
        best = slug
if best:
    print(best)
else:
    print('NONE')
" 2>/dev/null)
    
    if [ "$PROJECT" = "NONE" ]; then
        echo "Could not detect project. Posting to #general."
        CHANNEL_ID=$(python3 -c "import json; print(json.load(open('$MAP_FILE'))['general_channel'])")
    fi
fi

if [ -z "$CHANNEL_ID" ]; then
    CHANNEL_ID=$(python3 -c "
import json
with open('$MAP_FILE') as f:
    data = json.load(f)
proj = data['projects'].get('$PROJECT', {})
print(proj.get('channel_id', data['general_channel']))
" 2>/dev/null)
fi

if [ -z "$MESSAGE" ]; then
    echo "Usage: $0 <project_slug|--detect> <message>"
    exit 1
fi

# Post to channel (handle messages > 2000 chars by splitting)
python3 << PYEOF
import json, sys, os

token = "$KITT_TOKEN"
channel = "$CHANNEL_ID"
message = '''$MESSAGE'''

import urllib.request

def post(msg):
    data = json.dumps({"content": msg}).encode()
    req = urllib.request.Request(
        f"https://discord.com/api/v10/channels/{channel}/messages",
        data=data,
        headers={
            "Authorization": f"Bot {token}",
            "Content-Type": "application/json"
        }
    )
    resp = urllib.request.urlopen(req)
    return json.loads(resp.read())

# Split if needed
while len(message) > 2000:
    split_at = message[:2000].rfind('\n')
    if split_at == -1:
        split_at = 2000
    post(message[:split_at])
    message = message[split_at:].lstrip('\n')

if message.strip():
    result = post(message)
    print(f"Posted to channel {channel}: {result.get('id','')}")
PYEOF
