import { AiUsageTokenService } from '../services/token.service';
import { AiUsageDashboardService } from '../services/dashboard.service';
import { AiUsageDeviceService } from '../services/device.service';
import { BlockDeviceDto, UnblockDeviceDto, RevokeTokenDto, DashboardQueryDto, DeviceQueryDto, TokenQueryDto } from '../dto';
import type { Response } from 'express';
export declare class AiUsageAdminController {
    private readonly tokenSvc;
    private readonly dashboardSvc;
    private readonly deviceSvc;
    constructor(tokenSvc: AiUsageTokenService, dashboardSvc: AiUsageDashboardService, deviceSvc: AiUsageDeviceService);
    summary(q: DashboardQueryDto, req: any): Promise<{
        totalTokens: number;
        totalCostUsd: string;
        activeDevices: number;
        activeProjects: number;
        activeUsers: number;
    }>;
    trend(q: DashboardQueryDto, req: any): Promise<{
        series: {
            key: string;
            points: {
                bucket: any;
                tokens: number;
                costUsd: any;
            }[];
        }[];
    } | {
        series: {
            key: string;
            label: string;
            points: {
                bucket: string;
                tokens: number;
                costUsd: string;
            }[];
        }[];
    }>;
    breakdown(q: DashboardQueryDto, req: any): Promise<{
        items: {
            key: any;
            tokens: number;
            costUsd: any;
            share: number;
        }[];
        pagination: {
            page: number;
            pageSize: number;
            total: number;
            totalPages: number;
        };
    }>;
    toolFrequency(q: DashboardQueryDto, req: any): Promise<{
        items: {
            name: any;
            eventCount: number;
            useCount: number;
            share: number;
        }[];
    }>;
    sessionStats(q: DashboardQueryDto & {
        userId?: string;
        projectBasename?: string;
    }, req: any): 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(sessionId: string, req: any): 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: import("@prisma/client/runtime/library").JsonValue;
            stopReason: string | null;
            serviceTier: string | null;
            gitBranch: string | null;
            agentVersionEvent: string | null;
            worktreeLabel: string | null;
            cwdBasename: string | null;
        }[];
    }>;
    turnGapDistribution(q: DashboardQueryDto, req: any): Promise<{
        buckets: {
            '<5s': number;
            '5-30s': number;
            '30s-2min': number;
            '>2min': number;
        };
        avgGapSec: number;
        medianGapSec: number;
    }>;
    serviceTierMix(q: DashboardQueryDto, req: any): Promise<{
        items: {
            tier: any;
            eventCount: number;
            tokens: number;
            costUsd: any;
            costShare: number;
        }[];
    }>;
    stopReasonMix(q: DashboardQueryDto, req: any): Promise<{
        items: {
            reason: any;
            eventCount: number;
            tokens: number;
            share: number;
        }[];
    }>;
    dailyUserMatrix(q: DashboardQueryDto, req: any): Promise<{
        users: {
            id: any;
            label: any;
        }[];
        dates: string[];
        cells: {
            date: any;
            userId: any;
            tokens: number;
            costUsd: any;
        }[];
    }>;
    gitBranchHeatmap(q: DashboardQueryDto, req: any): Promise<{
        items: {
            branch: any;
            eventCount: number;
            tokens: number;
            costUsd: any;
        }[];
    }>;
    exportCsv(q: DashboardQueryDto & {
        withRich?: string;
        format?: string;
    }, req: any, res: Response): Promise<void>;
    listDevices(q: DeviceQueryDto, req: any): Promise<{
        items: ({
            user: {
                displayName: string;
                id: string;
                email: string;
            };
        } & {
            id: string;
            createdAt: Date;
            userId: string;
            deviceId: string;
            updatedAt: Date;
            organizationId: string;
            createdById: string;
            hostname: string;
            osUser: string | null;
            osPlatform: import("@prisma/client").$Enums.AiUsageOsPlatform;
            agentVersion: string | null;
            firstSeenAt: Date;
            firstSeenIp: string | null;
            lastSeenAt: Date;
            blockedAt: Date | null;
            blockedById: string | null;
            blockedReason: string | null;
        })[];
        pagination: {
            page: number;
            pageSize: number;
            total: number;
            totalPages: number;
        };
    }>;
    blockDevice(id: string, dto: BlockDeviceDto, adminId: string, req: any): Promise<{
        id: string;
        createdAt: Date;
        userId: string;
        deviceId: string;
        updatedAt: Date;
        organizationId: string;
        createdById: string;
        hostname: string;
        osUser: string | null;
        osPlatform: import("@prisma/client").$Enums.AiUsageOsPlatform;
        agentVersion: string | null;
        firstSeenAt: Date;
        firstSeenIp: string | null;
        lastSeenAt: Date;
        blockedAt: Date | null;
        blockedById: string | null;
        blockedReason: string | null;
    }>;
    unblockDevice(id: string, _dto: UnblockDeviceDto, req: any): Promise<{
        id: string;
        createdAt: Date;
        userId: string;
        deviceId: string;
        updatedAt: Date;
        organizationId: string;
        createdById: string;
        hostname: string;
        osUser: string | null;
        osPlatform: import("@prisma/client").$Enums.AiUsageOsPlatform;
        agentVersion: string | null;
        firstSeenAt: Date;
        firstSeenIp: string | null;
        lastSeenAt: Date;
        blockedAt: Date | null;
        blockedById: string | null;
        blockedReason: string | null;
    }>;
    listTokens(q: TokenQueryDto, req: any): Promise<{
        items: ({
            user: {
                displayName: string;
                id: string;
                email: string;
            };
        } & {
            id: string;
            createdAt: Date;
            userId: string;
            name: string;
            updatedAt: Date;
            organizationId: string;
            createdById: string;
            revokedAt: Date | null;
            prefix: string;
            tokenHash: string;
            lastUsedAt: Date | null;
            lastUsedIp: string | null;
            revokedById: string | null;
        })[];
        pagination: {
            page: number;
            pageSize: number;
            total: number;
            totalPages: number;
        };
    }>;
    adminRevokeToken(id: string, _dto: RevokeTokenDto, adminId: string, req: any): Promise<{
        id: string;
        createdAt: Date;
        userId: string;
        name: string;
        updatedAt: Date;
        organizationId: string;
        createdById: string;
        revokedAt: Date | null;
        prefix: string;
        tokenHash: string;
        lastUsedAt: Date | null;
        lastUsedIp: string | null;
        revokedById: string | null;
    }>;
    listDlq(reason: string, page: string, pageSize: string, req: any): Promise<{
        items: {
            id: string;
            createdAt: Date;
            deviceId: string | null;
            updatedAt: Date;
            organizationId: string;
            createdById: string;
            reason: import("@prisma/client").$Enums.AiUsageDlqReason;
            rawPayload: import("@prisma/client/runtime/library").JsonValue;
        }[];
        pagination: {
            page: number;
            pageSize: number;
            total: number;
            totalPages: number;
        };
    }>;
}
