import { PrismaService } from "../../../core/database/prisma/prisma.service";
import { Prisma } from '@prisma/client';
interface QueryRange {
    from: Date;
    to: Date;
}
interface BaseScope {
    organizationId: string;
    userId?: string;
}
export declare class AiUsageDashboardService {
    private readonly prisma;
    constructor(prisma: PrismaService);
    resolveRange(period?: string, from?: string, to?: string): QueryRange;
    private buildWhere;
    private orgFilterSql;
    private userFilterSql;
    private assertScopeBound;
    summary(scope: BaseScope, range: QueryRange): Promise<{
        totalTokens: number;
        totalCostUsd: string;
        activeDevices: number;
        activeProjects: number;
        activeUsers: number;
    }>;
    trend(scope: BaseScope, range: QueryRange, granularity?: 'day' | 'week' | 'month', groupBy?: 'none' | 'tool' | 'model' | 'topUser' | 'user' | 'project'): Promise<{
        series: {
            key: string;
            points: {
                bucket: any;
                tokens: number;
                costUsd: any;
            }[];
        }[];
    } | {
        series: {
            key: string;
            label: string;
            points: {
                bucket: string;
                tokens: number;
                costUsd: string;
            }[];
        }[];
    }>;
    breakdown(scope: BaseScope, range: QueryRange, by: 'user' | 'project' | 'tool' | 'model' | 'device', page?: number, pageSize?: number): Promise<{
        items: {
            key: any;
            tokens: number;
            costUsd: any;
            share: number;
        }[];
        pagination: {
            page: number;
            pageSize: number;
            total: number;
            totalPages: number;
        };
    }>;
    listBlocks(scope: BaseScope, hoursPerBlock?: number, limitBlocks?: number): Promise<{
        blocks: {
            isActive: boolean;
            elapsedHours: number;
            remainingHours: number;
            burnRateUsdPerHour: string;
            startedAt: Date;
            endsAt: Date;
            events: number;
            tokens: number;
            costUsd: string;
            models: string[];
        }[];
    }>;
    listMyDevices(userId: string): Promise<{
        id: string;
        hostname: string;
        osUser: string | null;
        osPlatform: import("@prisma/client").$Enums.AiUsageOsPlatform;
        agentVersion: string | null;
        firstSeenAt: Date;
        lastSeenAt: Date;
        blockedAt: Date | null;
        blockedReason: string | null;
    }[]>;
    toolFrequency(scope: BaseScope, range: QueryRange): Promise<{
        items: {
            name: any;
            eventCount: number;
            useCount: number;
            share: number;
        }[];
    }>;
    sessionStats(scope: BaseScope, range: QueryRange, filter?: {
        userId?: string;
        projectBasename?: string;
    }, page?: number, pageSize?: number): Promise<{
        sessionCount: number;
        avgDurationSec: number;
        avgTurns: number;
        durationBuckets: Record<string, number>;
        turnBuckets: Record<string, number>;
        recentSessions: {
            sessionId: any;
            userId: any;
            userLabel: any;
            projectBasename: any;
            model: any;
            startedAt: any;
            endedAt: any;
            durationSec: number;
            turnCount: number;
            tokens: number;
            costUsd: any;
        }[];
        pagination: {
            page: number;
            pageSize: number;
            total: number;
            totalPages: number;
        };
    }>;
    sessionTurns(scope: BaseScope, sessionId: string): Promise<{
        sessionId: string;
        turns: never[];
        summary: null;
    } | {
        sessionId: string;
        summary: {
            userId: string;
            userLabel: string;
            projectBasename: string;
            projectPath: string;
            tool: import("@prisma/client").$Enums.AiUsageTool;
            startedAt: Date;
            endedAt: Date;
            durationSec: number;
            turnCount: number;
            totalTokens: number;
            totalCostUsd: string;
            toolUseAgg: {
                name: string;
                count: number;
            }[];
        };
        turns: {
            id: string;
            ts: Date;
            turnIndex: number | null;
            model: string;
            inputTokens: number;
            outputTokens: number;
            cacheCreationTokens: number;
            cacheReadTokens: number;
            totalTokens: number;
            costUsd: string;
            toolUseCount: number | null;
            toolNames: Prisma.JsonValue;
            stopReason: string | null;
            serviceTier: string | null;
            gitBranch: string | null;
            agentVersionEvent: string | null;
            worktreeLabel: string | null;
            cwdBasename: string | null;
        }[];
    }>;
    dailyUserMatrix(scope: BaseScope, range: QueryRange, topUsers?: number): Promise<{
        users: {
            id: any;
            label: any;
        }[];
        dates: string[];
        cells: {
            date: any;
            userId: any;
            tokens: number;
            costUsd: any;
        }[];
    }>;
    turnGapDistribution(scope: BaseScope, range: QueryRange): Promise<{
        buckets: {
            '<5s': number;
            '5-30s': number;
            '30s-2min': number;
            '>2min': number;
        };
        avgGapSec: number;
        medianGapSec: number;
    }>;
    serviceTierMix(scope: BaseScope, range: QueryRange): Promise<{
        items: {
            tier: any;
            eventCount: number;
            tokens: number;
            costUsd: any;
            costShare: number;
        }[];
    }>;
    stopReasonMix(scope: BaseScope, range: QueryRange): Promise<{
        items: {
            reason: any;
            eventCount: number;
            tokens: number;
            share: number;
        }[];
    }>;
    exportRichEvents(scope: BaseScope, range: QueryRange, limit?: number): Promise<{
        ts: string;
        userLabel: string;
        projectBasename: string;
        sessionId: string;
        turnIndex: number | null;
        tool: import("@prisma/client").$Enums.AiUsageTool;
        model: string;
        inputTokens: number;
        outputTokens: number;
        cacheCreationTokens: number;
        cacheReadTokens: number;
        totalTokens: number;
        costUsd: string;
        toolUseCount: number | null;
        toolNames: Prisma.JsonValue;
        stopReason: string | null;
        serviceTier: string | null;
        gitBranch: string | null;
        worktreeLabel: string | null;
        agentVersionEvent: string | null;
    }[]>;
    gitBranchHeatmap(scope: BaseScope, range: QueryRange, limit?: number): Promise<{
        items: {
            branch: any;
            eventCount: number;
            tokens: number;
            costUsd: any;
        }[];
    }>;
}
export {};
