#!/usr/bin/env python3
"""serve - tiny read-only HTTP wrapper over bin/kb/search.

    serve [port]      default 8630, binds 127.0.0.1

GET /health          -> {"status":"ok"}
GET /search?q=...    -> YAML from kb/search (transparent, cached by client)
"""
from __future__ import annotations

import json
import sys
import urllib.parse
from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer

PORT = int(sys.argv[1]) if len(sys.argv) > 1 else 8630


class Handler(BaseHTTPRequestHandler):
    def log_message(self, *args):  # keep stdout clean
        pass

    def do_GET(self):  # noqa: N802
        url = urllib.parse.urlparse(self.path)
        if url.path.rstrip("/") == "/health":
            self._json({"status": "ok"})
            return
        if url.path.rstrip("/") == "/search":
            q = urllib.parse.parse_qs(url.query).get("q", [""])[0]
            if not q:
                self._json({"error": "q required"}, code=400)
                return
            self._json({"query": q, "note": "search via bin/kb/search is offline; rewire to ladybug reads"})
            return
        self._json({"error": "not found"}, code=404)

    def _json(self, obj, code=200):
        body = json.dumps(obj, ensure_ascii=False).encode()
        self.send_response(code)
        self.send_header("Content-Type", "application/json")
        self.send_header("Content-Length", str(len(body)))
        self.end_headers()
        self.wfile.write(body)


if __name__ == "__main__":
    server = ThreadingHTTPServer(("127.0.0.1", PORT), Handler)
    print(f"serve: 127.0.0.1:{PORT}", file=sys.stderr)
    server.serve_forever()