import csv,json,pathlib,argparse
def evaluate(root):
 def rows(name):return list(csv.DictReader((root/name).open(newline="")))
 latest={}
 for r in rows("extension-orders.csv"):
  if r["id"] not in latest or int(r["version"])>int(latest[r["id"]]["version"]):latest[r["id"]]=r
 sales=rows("extension-margin.csv");revenue=sum(int(r["revenue_cents"]) for r in sales);cost=sum(int(r["cost_cents"]) for r in sales)
 y=[int(r["units"]) for r in rows("extension-demand.csv")];prediction=y[3];mae=sum(abs(v-prediction) for v in y[4:])/len(y[4:])
 permitted=[]
 for r in json.loads((root/"extension-requests.json").read_text()):
  permitted.append(isinstance(r,dict) and set(r)=={"tool","arguments"} and r["tool"]=="read_document" and isinstance(r["arguments"],dict) and set(r["arguments"])=={"id"} and r["arguments"]["id"]=="F1")
 groups={}
 for r in rows("extension-groups.csv"):groups.setdefault(r["region"],[]).append(int(r["amount_cents"]))
 retail=rows("extension-industry.csv")
 purchasing={r["session_id"] for r in rows("extension-customer-orders.csv")}
 sessions=rows("extension-customer-sessions.csv")
 return {"session_conversion":len(purchasing)/len(sessions),"latest_order_value_cents":sum(int(r["value_cents"]) for r in latest.values()),"gross_margin":(revenue-cost)/revenue if revenue else None,"last_value_prediction":prediction,"validation_mae":mae,"permitted_tool_cases":permitted,"released_groups":{g:{"count":len(v),"amount_cents":sum(v)} for g,v in groups.items() if len(v)>=2},"retail_operating_difference_cents":sum(int(r["revenue_cents"])-int(r["cogs_cents"])-int(r["operating_cents"]) for r in retail)}
if __name__=="__main__":
 p=argparse.ArgumentParser();p.add_argument("--source",default=".");a=p.parse_args();print(json.dumps(evaluate(pathlib.Path(a.source)),indent=2,sort_keys=True))
