"""Script for executing eval for SpaceNet challenges."""
from ..eval.challenges import off_nadir_buildings
from ..eval.challenges import spacenet_buildings_2
import argparse
import pandas as pd
supported_challenges = ['off-nadir', 'spacenet-buildings2']
# , 'spaceNet-buildings1', 'spacenet-roads1', 'buildings', 'roads']


def main():
    parser = argparse.ArgumentParser(
        description='Evaluate SpaceNet Competition CSVs')
    parser.add_argument('--proposal_csv', '-p', type=str,
                        help='Proposal CSV')
    parser.add_argument('--truth_csv', '-t', type=str,
                        help='Truth CSV')
    parser.add_argument('--challenge', '-c', type=str,
                        default='off-nadir',
                        choices=supported_challenges,
                        help='SpaceNet Challenge eval type')
    parser.add_argument('--output_file', '-o', type=str,
                        default='Off-Nadir',
                        help='Output file To write results to CSV')
    args = parser.parse_args()

    truth_file = args.truth_csv
    prop_file = args.proposal_csv

    if args.challenge.lower() == 'off-nadir':
        evalSettings = {'miniou': 0.5,
                        'min_area': 20}
        results_DF, results_DF_Full = off_nadir_buildings(
            prop_csv=prop_file, truth_csv=truth_file, **evalSettings)
    elif args.challenge.lower() == 'spaceNet-buildings2'.lower():
        evalSettings = {'miniou': 0.5,
                        'min_area': 20}
        results_DF, results_DF_Full = spacenet_buildings_2(
                prop_csv=prop_file, truth_csv=truth_file, **evalSettings)

    with pd.option_context('display.max_rows', None,
                           'display.max_columns', None):
        print(results_DF)

    if args.output_file:
        print("Writing summary results to {}".format(
            args.output_file.rstrip('.csv') + '.csv'))
        results_DF.to_csv(args.output_file.rstrip('.csv') + '.csv',
                          index=False)
        print("Writing full results to {}".format(
            args.output_file.rstrip('.csv')+"_full.csv"))
        results_DF_Full.to_csv(args.output_file.rstrip('.csv')+"_full.csv",
                               index=False)


if __name__ == '__main__':
    main()