#!/usr/bin/env python3
# coding: utf-8

import sys

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

filename = sys.argv[1]

df = pd.read_csv(filename, parse_dates={"start": ["Date", "Time"]})

print("minimum duration = {} second(s)".format(df["Duration"].min()))
print("maximum duration =", df["Duration"].max(), "second(s)")
print(f"average duration = {df['Duration'].mean():.3f} second(s)")

start = df["start"]
stop = start + pd.to_timedelta(df["Duration"], unit="s")
total_duration = df["Duration"].sum()

m = start.min()
i = start[start == m].index[0]

df = pd.concat([
    pd.DataFrame({"When": m, "Start": 0}, index=[i]),
    pd.DataFrame({"When": start, "Start": 1}),
    pd.DataFrame({"When": stop, "Start": -1})
])
df = df.sort_values(by=["When", "Start"])
df["Count"] = df["Start"].cumsum()

total_time = (df["When"].max() - df["When"].min()).total_seconds()

print("maximum concurrent = {} call(s)".format(df["Count"].max()))
print("mean concurrent = {:.3f} call(s)".format(float(total_duration)/total_time))

plt.step(df["When"], df["Count"], where="post")
plt.fill_between(df["When"], df["Count"], step="post", alpha=0.5)
plt.savefig("diagram.png", bbox_inches="tight")

