#!/usr/bin/env python3
"""
Decision Sync Server
Receives dashboard button clicks and saves them to a JSON file.
Tony checks this file during heartbeats.
"""

import json
import os
from datetime import datetime
from http.server import HTTPServer, BaseHTTPRequestHandler

PORT = 8421
DECISIONS_FILE = os.path.expanduser("~/.openclaw/workspace/decisions.json")

class DecisionHandler(BaseHTTPRequestHandler):
    def _send_cors_headers(self):
        self.send_header("Access-Control-Allow-Origin", "*")
        self.send_header("Access-Control-Allow-Methods", "POST, OPTIONS")
        self.send_header("Access-Control-Allow-Headers", "Content-Type")
    
    def do_OPTIONS(self):
        self.send_response(200)
        self._send_cors_headers()
        self.end_headers()
    
    def do_POST(self):
        try:
            content_length = int(self.headers.get('Content-Length', 0))
            body = self.rfile.read(content_length)
            data = json.loads(body.decode('utf-8'))
            
            # Load existing decisions
            decisions = {"events": []}
            if os.path.exists(DECISIONS_FILE):
                with open(DECISIONS_FILE, 'r') as f:
                    decisions = json.load(f)
            
            # Add new event
            event = {
                "timestamp": datetime.now().isoformat(),
                "action": data.get("action"),
                "item": data.get("item", data.get("recommendation", {})),
                "type": data.get("type", "unknown")
            }
            decisions["events"].append(event)
            decisions["lastUpdated"] = datetime.now().isoformat()
            
            # Save
            os.makedirs(os.path.dirname(DECISIONS_FILE), exist_ok=True)
            with open(DECISIONS_FILE, 'w') as f:
                json.dump(decisions, f, indent=2)
            
            # Respond
            self.send_response(200)
            self._send_cors_headers()
            self.send_header("Content-Type", "application/json")
            self.end_headers()
            self.wfile.write(json.dumps({"ok": True}).encode())
            
            print(f"[{datetime.now().strftime('%H:%M:%S')}] {event['action']}: {event['item'].get('title', 'unknown')}")
            
        except Exception as e:
            self.send_response(500)
            self._send_cors_headers()
            self.end_headers()
            self.wfile.write(json.dumps({"error": str(e)}).encode())
            print(f"Error: {e}")
    
    def log_message(self, format, *args):
        pass  # Suppress default logging

if __name__ == "__main__":
    server = HTTPServer(("127.0.0.1", PORT), DecisionHandler)
    print(f"Decision server running on http://127.0.0.1:{PORT}")
    print(f"Saving to: {DECISIONS_FILE}")
    server.serve_forever()
