from http.server import BaseHTTPRequestHandler, HTTPServer
import json
from urllib.parse import parse_qs, urlsplit


class Handler(BaseHTTPRequestHandler):
    protocol_version = "HTTP/1.1"

    def respond(self, status, data, headers=None):
        body = json.dumps(data, ensure_ascii=False).encode("utf-8")
        self.send_response(status)
        self.send_header("Content-Type", "application/json; charset=utf-8")
        self.send_header("Content-Length", str(len(body)))
        self.send_header("Connection", "close")
        self.send_header("Cache-Control", "no-store")
        for name, value in (headers or {}).items():
            self.send_header(name, value)
        self.end_headers()
        self.close_connection = True
        if self.command != "HEAD":
            self.wfile.write(body)

    def do_HEAD(self):
        self.do_GET()

    def do_GET(self):
        url = urlsplit(self.path)
        if url.path == "/api/hello":
            name = parse_qs(url.query).get("name", ["World"])[0]
            self.respond(200, {
                "message": f"こんにちは、{name}さん！",
                "received_x_lesson": self.headers.get("X-Lesson"),
            })
        else:
            self.respond(404, {"error": "そのパスはありません"})


def main():
    with HTTPServer(("127.0.0.1", 8000), Handler) as server:
        print("http://127.0.0.1:8000/ を開いてください。終了は Ctrl+C", flush=True)
        try:
            server.serve_forever()
        except KeyboardInterrupt:
            print("サーバーを終了します")


if __name__ == "__main__":
    main()
