import pandas as pd

FEATHERS_DIR = "feathers"

import generate_graphs as gg
import helper_scripts.helper_functions as hf


def main():
    data = pd.read_feather(f"{FEATHERS_DIR}/data.feather")

    # print_kem_ids()

    # stats_of_qtl95_of_packetloss(data)
    error_count_and_rate(data)


def stats_of_qtl95_of_packetloss(data):
    ldata = data
    print("Stats of qtl95")

    ldata = gg.filter_data(ldata, scenario="packetloss", protocol="quic")
    ldata = ldata.query("kem_alg == 'x25519' or kem_alg == 'frodo640aes'")
    # ldata = ldata.query("kem_alg == 'mlkem1024' or kem_alg == 'frodo1344aes'")

    # ldata = ldata.query
    print("Showing data of packetloss quic")
    ldata = ldata.drop(
        columns=[
            "scenario",
            "protocol",
            "sec_level",
            "cli_pkt_loss",
            "cli_delay",
            "cli_rate",
            "measurements",
        ]
    )
    print(ldata)


def error_count_and_rate(data):
    print("Error count and rate")
    ldata = data
    print("Total index length")
    print(len(ldata.index))
    print("Total error count")
    print(
        ldata["error_count"].sum()
    )  # Grep tells there are 83996 CRYPTO_BUFFER_EXCEEDEDs, while total error count is just a bit above it 84186
    ldata = ldata.query("error_count > 0")
    print("Total index length with error count > 0")
    print(len(ldata.index))
    ldata = ldata[~ldata["kem_alg"].str.contains("frodo")]
    print("Total index length with error count > 0 and without frodo")
    print(len(ldata.index))
    print(
        ldata[
            [
                "scenario",
                "protocol",
                "sec_level",
                "kem_alg",
                "error_count",
                "error_rate",
            ]
        ]
    )
    # print(ldata["scenario"].unique()) # all 10 scenarios
    print("With error count > 1")
    ldata = ldata.query("error_count > 1")
    print(
        ldata[
            [
                "scenario",
                "protocol",
                "sec_level",
                "kem_alg",
                "error_count",
                "error_rate",
            ]
        ]
    )


def print_kem_ids():
    data = hf.get_kem_ids()
    print(data)


main()