from pathlib import Path
import pandas as pd
import numpy as np
from _shared import load
ROOT = Path(__file__).resolve().parents[1]
OUT = ROOT / "outputs"
OUT.mkdir(exist_ok=True)
from decimal import Decimal
orders=load("orders").copy()
paid=orders.loc[orders["status"].isin(["paid","refunded"])].copy()
paid["net"]= [Decimal(str(a))-Decimal(str(r)) for a,r in zip(paid["amount"],paid["refund_amount"])]
summary=paid.groupby("user_id",dropna=False).agg(order_count=("order_id","size"),known_amounts=("amount","count"),net=("net","sum"))
assert int(summary["order_count"].sum())==len(paid)
assert sum(summary["net"],Decimal("0"))==sum(paid["net"],Decimal("0"))
paid["user_order_count"]=paid.groupby("user_id",dropna=False)["order_id"].transform("size")
assert len(paid["user_order_count"])==len(paid)
small=pd.DataFrame({"g":["a","a","b",None],"v":[2,None,6,8]})
check=small.groupby("g",dropna=False)["v"].agg(["size","count","mean"])
assert check.loc["a","size"]==2 and check.loc["a","count"]==1 and check.loc["a","mean"]==2
assert check["size"].sum()==4
print(check.to_string())
print(summary.to_string())
summary.reset_index().to_csv(OUT / "pd_group_summary.csv",index=False)
