#!/usr/bin/env python3

import argparse
import pandas as pd
import json
import os


def parse_args():
    parser = argparse.ArgumentParser(
        description="Extract instance names and volume fractions from a file"
    )
    parser.add_argument(
        "-i",
        "--input_file",
        help="Path to the json file containing the data of all experiments",
        default="./foo_goo/all.json",
    )
    parser.add_argument(
        "-o",
        "--output_file_path",
        help="name of the file where to save the results",
        default="debug_info.csv",
    )
    args = parser.parse_args()
    return args


def collect_data(file_path, info_names) -> list:
    info_data = []
    with open(file_path, "r") as file:
        data = json.load(file)
    for instance_set in data:
        for instance_number in data[instance_set]:
            debug_info = data[instance_set][instance_number]["appendix"]["debug_info"]
            info_data.append(
                [int(instance_set), int(instance_number)]
                + [debug_info[name] for name in info_names]
            )
    return info_data


def make_dataframe(info_data, info_names):
    df = pd.DataFrame(
        data=info_data,
        columns=["instance_set", "instance_number"] + info_names,
    )
    df = df.drop("instance_number", axis=1)
    df = df.groupby(by=["instance_set"], as_index=False)
    df = df.mean()
    df = df.sort_values(by="instance_set")
    return df


def make_extra_info(df):
    if "greedy_search_skips" in df and "greedy_search_calls" in df:
        df["greedy_skip_ratio"] = df["greedy_search_skips"] / df["greedy_search_calls"]
        # df = df.drop(["greedy_search_skips", "greedy_search_calls"], axis=1)
    return df


if __name__ == "__main__":
    args = parse_args()
    info_names = ["greedy_search_calls", "greedy_search_skips"]
    info_data = collect_data(args.input_file, info_names)
    df = make_dataframe(info_data, info_names)
    df = make_extra_info(df)
    df.to_csv(args.output_file_path, index=False)
    print(df)
