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


class Handler(BaseHTTPRequestHandler):
    def do_POST(self):
        length = int(self.headers.get("Content-Length", "0"))
        body = self.rfile.read(length).decode("utf-8", errors="replace")
        print("\n" + "=" * 72)
        print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
        print(f"{self.command} {self.path}")
        print(f"Authorization: {self.headers.get('Authorization', '')}")
        try:
            print(json.dumps(json.loads(body), indent=2))
        except json.JSONDecodeError:
            print(body)
        self.send_response(200)
        self.send_header("Content-Type", "application/json")
        self.end_headers()
        self.wfile.write(b'{"ok":true}')

    def do_GET(self):
        self.send_response(200)
        self.send_header("Content-Type", "text/plain")
        self.end_headers()
        self.wfile.write(b"Internet_Ethernet API test server is running.\n")

    def log_message(self, format, *args):
        return


if __name__ == "__main__":
    server = HTTPServer(("0.0.0.0", 8080), Handler)
    print("API test server listening on http://0.0.0.0:8080")
    print("Use your PC LAN IP as API host in the ESP setup page.")
    server.serve_forever()
