from flask import Blueprint, jsonify
from db import get_db
from services.filters import range_start, now_iso

bp = Blueprint('dashboard', __name__, url_prefix='/api/dashboard')


def _aggregate(conn, since_iso):
    if since_iso:
        rows = conn.execute(
            'SELECT status, COUNT(*) as cnt FROM Run WHERE startedAt >= ? GROUP BY status', (since_iso,)
        ).fetchall()
    else:
        rows = conn.execute('SELECT status, COUNT(*) as cnt FROM Run GROUP BY status').fetchall()

    counts = {'success': 0, 'failed': 0, 'running': 0, 'pending': 0}
    for row in rows:
        if row['status'] in counts:
            counts[row['status']] = row['cnt']
    executions = sum(counts.values())
    return {'executions': executions, **counts}


@bp.route('/kpis')
def kpis():
    conn = get_db()
    try:
        last_24h = _aggregate(conn, range_start('24h'))
        last_7d = _aggregate(conn, range_start('7d'))
        last_30d = _aggregate(conn, range_start('30d'))
        all_time = _aggregate(conn, None)
    finally:
        conn.close()

    return jsonify(
        {
            'ranges': {'24h': last_24h, '7d': last_7d, '30d': last_30d},
            'allTime': all_time,
            'generatedAt': now_iso(),
        }
    )
