File size: 2,690 Bytes
7477316
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
"""
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,
        },
    }