""" Usage endpoint — User usage tracking and analytics. """ from __future__ import annotations from fastapi import APIRouter, HTTPException, Depends from api.auth import require_auth, FirebaseUser from api.database import get_user_usage, get_user_stats, get_or_create_user router = APIRouter() @router.get("/usage") def get_usage(limit: int = 100, user: FirebaseUser = Depends(require_auth)): """Get usage history for the authenticated user.""" usage = get_user_usage(user.uid, limit=limit) return { "user_id": user.uid, "email": user.email, "usage": usage, "count": len(usage), } @router.get("/usage/stats") def get_usage_stats(user: FirebaseUser = Depends(require_auth)): """Get aggregated usage statistics for the authenticated user.""" # Ensure user exists in database get_or_create_user(user.uid, user.email, user.name) stats = get_user_stats(user.uid) usage = get_user_usage(user.uid, limit=1000) # Calculate additional stats total_runs = len(usage) methods_used = {} systems_used = {} for u in usage: method = u.get("method", "unknown") system = u.get("system", "unknown") methods_used[method] = methods_used.get(method, 0) + 1 systems_used[system] = systems_used.get(system, 0) + 1 return { "user_id": user.uid, "email": user.email, "name": user.name, "stats": { **stats, "total_runs": total_runs, "methods_used": methods_used, "systems_used": systems_used, }, } @router.get("/usage/summary") def get_usage_summary(user: FirebaseUser = Depends(require_auth)): """Get a dashboard-friendly summary of user's impact.""" get_or_create_user(user.uid, user.email, user.name) stats = get_user_stats(user.uid) # Calculate equivalents co2_tonnes = stats["total_co2_saved_kg"] / 1000 trees_equivalent = int(stats["total_co2_saved_kg"] / 21) # ~21 kg CO2/tree/year cars_removed = round(co2_tonnes / 4.6, 1) # ~4.6 t CO2/car/year return { "total_optimizations": stats["total_optimizations"], "energy_saved": { "kwh": round(stats["total_energy_saved_kwh"], 2), "mwh": round(stats["total_energy_saved_kwh"] / 1000, 2), }, "co2_saved": { "kg": round(stats["total_co2_saved_kg"], 2), "tonnes": round(co2_tonnes, 2), }, "money_saved_usd": round(stats["total_money_saved_usd"], 2), "equivalents": { "trees_planted": trees_equivalent, "cars_removed": cars_removed, }, }