"""Example authenticated HTTP AI. Replace decide(); standard library only."""
from http.server import BaseHTTPRequestHandler,ThreadingHTTPServer
import hmac
import json
import os

TOKEN=os.environ['AI_TOKEN']

def decide(request):
    legal=request['legal_actions']
    return {'type':'check' if legal['check'] else 'call' if legal['call'] else 'fold'}

class Agent(BaseHTTPRequestHandler):
    def log_message(self,*args):pass
    def do_POST(self):
        if self.path!='/decide':self.send_error(404);return
        if not hmac.compare_digest(self.headers.get('Authorization',''),'Bearer '+TOKEN):self.send_error(401);return
        try:
            size=int(self.headers.get('Content-Length','0'))
            if not 0<size<=65536:raise ValueError()
            request=json.loads(self.rfile.read(size))
            if request['protocol']!='riverroom.ai.v1':raise ValueError()
            data=json.dumps({'request_id':request['request_id'],'action':decide(request)}).encode()
            self.send_response(200);self.send_header('Content-Type','application/json')
            self.send_header('Content-Length',str(len(data)));self.end_headers();self.wfile.write(data)
        except (ValueError,KeyError,TypeError):self.send_error(400)

if __name__=='__main__':
    server=ThreadingHTTPServer((os.environ.get('AI_BIND','127.0.0.1'),int(os.environ.get('AI_PORT','9000'))),Agent)
    print('RiverRoom example AI ready. Requests and keys are not logged.')
    try:server.serve_forever()
    except KeyboardInterrupt:server.server_close()
