"""Run only the independent local prototype, bound to IPv4 loopback."""
from pathlib import Path
import argparse
import os
import uvicorn
from backend.app import create_app
from backend.containment import install_guard
from backend.data_lock import data_lock, DataBusy


if __name__ == '__main__':
    parser=argparse.ArgumentParser(description='SHS local prototype. Invented data only.')
    parser.add_argument('--port',type=int,default=8787)
    parser.add_argument('--data-dir',type=Path,default=Path(__file__).parent/'.local-data')
    args=parser.parse_args()
    if not 1024 <= args.port <= 65535:
        parser.error('Use an unprivileged port between 1024 and 65535.')
    os.umask(0o077)
    static=Path(__file__).parent/'frontend/dist'
    if not (static/'index.html').is_file():
        parser.error('Build the frontend first. See README.md.')
    install_guard()
    try:
        with data_lock(args.data_dir,create=True):
            app=create_app(args.data_dir,static)
            print('Local prototype: http://127.0.0.1:'+str(args.port),flush=True)
            print('Invented data only. External integrations and outbound sockets are disabled.',flush=True)
            uvicorn.run(app,host='127.0.0.1',port=args.port,access_log=False,proxy_headers=False)
    except (DataBusy,ValueError) as error:
        parser.error(str(error))
