"""Disposable HTTP endpoint. Change the mode file to fast, slow or down."""
import argparse
import time
from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
from pathlib import Path


def serve(bind, port, mode_file):
    class Handler(BaseHTTPRequestHandler):
        def do_GET(self):
            if self.path != '/health':
                self.send_error(404)
                return
            try:
                mode = mode_file.read_text().strip()
            except FileNotFoundError:
                mode = 'fast'
            if mode not in ('fast', 'slow', 'down'):
                self.send_error(500, 'Use fast, slow or down in the mode file')
                return
            time.sleep(1.2 if mode == 'slow' else 0.025)
            body = (mode + '\n').encode()
            self.send_response(503 if mode == 'down' else 200)
            self.send_header('Content-Type', 'text/plain')
            self.send_header('Content-Length', str(len(body)))
            self.end_headers()
            self.wfile.write(body)

    ThreadingHTTPServer((bind, port), Handler).serve_forever()


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument('--bind', default='127.0.0.1')
    parser.add_argument('--port', type=int, default=8088)
    parser.add_argument('--mode-file', type=Path, default=Path('latency-mode.txt'))
    args = parser.parse_args()
    serve(args.bind, args.port, args.mode_file)
