#!/usr/bin/env python
import argparse
import sys
from os import path
from pathlib import Path

from werkzeug.middleware.profiler import ProfilerMiddleware

import card_live_dashboard.app
from card_live_dashboard import __version__

script_name = path.basename(path.realpath(sys.argv[0]))

# Instructions for running Flask (used by Dash) with a profiler from
# <https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xvi-debugging-testing-and-profiling>
if __name__ == '__main__':
    parser = argparse.ArgumentParser(prog=script_name, description=(
        'Run the CARD:Live Dashboard in profile mode (don\'t use for production).'
        'This will print out profile statistics (run times) of each web request.'
    ))
    parser.add_argument('cardlive_home_dir', nargs=1)
    parser.add_argument('--version', action='version', version=f'{script_name} {__version__}')
    args = parser.parse_args()
    if len(args.cardlive_home_dir) != 1:
        raise Exception('You must specify a valid cardlive_home_dir directory')
    else:
        card_live_home = Path(args.cardlive_home_dir[0])
        app = card_live_dashboard.app.build_app(card_live_home=card_live_home)

        flask_app = app.server
        flask_app.wsgi_app = ProfilerMiddleware(
            flask_app.wsgi_app,
            sort_by=('cumulative', 'nfl'),
            restrictions=['card_live_dashboard', 20])

        app.run_server(debug=True,
                       port=8050,
                       host='0.0.0.0')
