#!/usr/bin/env python
import argparse
from Results import Summary
from Utils import EnvDefault


def parse_arguments():
    ap = argparse.ArgumentParser()
    ap.add_argument(
        "-m",
        "--model",
        type=str,
        action=EnvDefault,
        envvar="model",
        required=True,
        help="model name",
    )
    ap.add_argument(
        "-s",
        "--score",
        type=str,
        action=EnvDefault,
        envvar="score",
        required=True,
        help="score name {accuracy, f1_micro, f1_macro, all}",
    )
    ap.add_argument(
        "-l",
        "--list",
        type=bool,
        required=False,
        default=False,
        help="List all results",
    )
    args = ap.parse_args()
    return (
        args.score,
        args.model,
        args.list,
    )


if __name__ == "__main__":
    (
        score,
        model,
        list_results,
    ) = parse_arguments()
    all_metrics = ["accuracy", "f1-macro", "f1-micro"]
    metrics = all_metrics if score == "all" else [score]
    summary = Summary()
    summary.acquire()
    for metric in metrics:
        title = f"BEST RESULT of {metric} for {model}"
        best = summary.best_result(
            criterion="model", value=model, score=metric
        )
        summary.show_result(data=best, title=title)
        summary.show_result(
            summary.best_result(score=metric), title=f"BEST RESULT of {metric}"
        )
        summary.show_top(score=metric, n=10)
    if list_results:
        summary.list_results()
