"""Identical app, interpreter, affinity and optional features for each engine."""
import argparse
import os

p = argparse.ArgumentParser()
p.add_argument('server', choices=['skirr', 'skirr-before', 'weft', 'peregrine'])
p.add_argument('--app', required=True)
p.add_argument('--lifespan', choices=['off', 'on'], default='off')
p.add_argument('--port', type=int, required=True)
p.add_argument('--workers', type=int, required=True)
p.add_argument('--cpus', required=True)
a = p.parse_args()
os.sched_setaffinity(0, set(map(int, a.cpus.split(','))))
app = 'tail_app:app' if a.app == 'tail' else 'apps:' + ('raw_app' if a.app == 'raw' else 'fastapi_app')
if a.server in ('skirr', 'skirr-before'):
    import skirr
    skirr.run(app, port=a.port, workers=a.workers, lifespan=a.lifespan)
elif a.server == 'weft':
    import weft
    raise SystemExit(weft.run(app, host='127.0.0.1', port=a.port,
        workers=a.workers, protocol='asgi', lifespan=a.lifespan, access_log=False,
        log_level='warning', http2=False, forwarded_allow_ips=None,
        compress=False, cache_size=0, request_id=False, trace_context=False))
else:
    import peregrine
    options = [app, '--host', '127.0.0.1', '--port', str(a.port),
        '--workers', str(a.workers), '--protocol', 'asgi', '--log-level', 'error']
    if a.lifespan == 'off':
        options.append('--no-lifespan')
    peregrine.run(options)