#!/usr/bin/env python3
"""Serve the isolated chr4 view, resolving matrix URLs for the browser."""
import argparse
import json
from functools import partial
from http.server import SimpleHTTPRequestHandler, ThreadingHTTPServer
from pathlib import Path
from urllib.parse import quote, urlsplit

ROOT = Path(__file__).resolve().parent

class Handler(SimpleHTTPRequestHandler):
    def end_headers(self):
        self.send_header('Access-Control-Allow-Origin', '*')
        super().end_headers()

    def do_GET(self):
        if urlsplit(self.path).path == '/chr4.json':
            config = json.loads((ROOT / 'chr4.json').read_text())
            for dataset in config['datasets']:
                for entry in dataset['files']:
                    entry['url'] = self.server.public_base + '/' + Path(urlsplit(entry['url']).path).name
            body = (json.dumps(config, indent=2) + '\n').encode()
            self.send_response(200)
            self.send_header('Content-Type', 'application/json')
            self.send_header('Content-Length', str(len(body)))
            self.end_headers()
            self.wfile.write(body)
        else:
            super().do_GET()

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument('--port', type=int, default=8000)
    parser.add_argument('--bind', default='127.0.0.1')
    parser.add_argument('--public-base', help='Browser-accessible URL for this server')
    args = parser.parse_args()
    server = ThreadingHTTPServer((args.bind, args.port), partial(Handler, directory=str(ROOT)))
    server.public_base = (args.public_base or f'http://localhost:{args.port}').rstrip('/')
    print('Open: https://vitessce.io/?url=' + quote(server.public_base + '/chr4.json', safe=''), flush=True)
    server.serve_forever()
