#!usr/bin/env python
# -*- coding: utf-8 -*-

import os
import argparse
import ast
import sys

from GANDLF import version
from GANDLF.cli import generate_metrics, copyrightMessage


if __name__ == "__main__":
    parser = argparse.ArgumentParser(
        prog="GANDLF_Metrics",
        formatter_class=argparse.RawTextHelpFormatter,
        description="Metrics calculator.\n\n" + copyrightMessage,
    )
    parser.add_argument(
        "-c",
        "--config",
        "--parameters_file",
        metavar="",
        type=str,
        required=True,
        help="The configuration file (contains all the information related to the training/inference session)",
    )
    parser.add_argument(
        "-i",
        "--inputdata",
        "--data_path",
        metavar="",
        type=str,
        required=True,
        help="The CSV file of input data that is used to generate the metrics; should contain 3 columns: 'SubjectID,Target,Prediction'",
    )
    parser.add_argument(
        "-o",
        "--outputfile",
        "--output_path",
        metavar="",
        type=str,
        default=None,
        help="Location to save the output dictionary. If not provided, will print to stdout.",
    )
    parser.add_argument(
        "-v",
        "--version",
        action="version",
        version="%(prog)s v{}".format(version) + "\n\n" + copyrightMessage,
        help="Show program's version number and exit.",
    )

    # This is a dummy argument that exists to trigger MLCube mounting requirements.
    # Do not remove.
    parser.add_argument("-rawinput", "--rawinput", help=argparse.SUPPRESS)

    args = parser.parse_args()
    assert args.config is not None, "Missing required parameter: config"
    assert args.inputdata is not None, "Missing required parameter: inputdata"

    try:
        generate_metrics.generate_metrics_dict(
            args.inputdata,
            args.config,
            args.outputfile,
        )
    except Exception as e:
        sys.exit("ERROR: " + str(e))

    print("Finished.")
