import { PromptBuilderService } from '../ai/prompt-builder.service';
import { VllmClientService } from '../ai/vllm-client.service';
import { PrismaService } from '../database/prisma.service';
import { RiotAccountService } from '../riot/riot-account.service';
import { RiotMatchService } from '../riot/riot-match.service';
import { CreateAnalysisDto } from './dto/create-analysis.dto';
import { GgtiScoreService } from './ggti-score.service';
import { LookupAnalysisDto } from '../riot/dto/search-riot-user.dto';
export declare class AnalysisService {
    private readonly prisma;
    private readonly riotAccountService;
    private readonly riotMatchService;
    private readonly ggtiScoreService;
    private readonly promptBuilder;
    private readonly vllm;
    constructor(prisma: PrismaService, riotAccountService: RiotAccountService, riotMatchService: RiotMatchService, ggtiScoreService: GgtiScoreService, promptBuilder: PromptBuilderService, vllm: VllmClientService);
    createAnalysisRequest(dto: CreateAnalysisDto): Promise<{
        requestId: bigint;
        status: string;
        latestSnapshotId: bigint;
    }>;
    getRequest(requestId: number): Promise<{
        latestSnapshotId: bigint | null;
        lastUpdatedAt: Date | null;
        riotAccount: {
            gameName: string;
            tagLine: string;
            id: bigint;
            gameId: bigint;
            puuid: string;
            lastSyncedAt: Date | null;
            createdAt: Date;
            updatedAt: Date;
        };
        id: bigint;
        createdAt: Date;
        riotAccountId: bigint;
        status: string;
        requestedMatchCount: number;
        errorCode: string | null;
        errorMessage: string | null;
        startedAt: Date | null;
        finishedAt: Date | null;
    }>;
    getSnapshot(snapshotId: number): Promise<{
        totalMatchCount: number;
        snapshotId: any;
        gameName: any;
        tagLine: any;
        profileIconId: any;
        summonerLevel: any;
        currentRanks: {
            solo: {
                tier: string;
                rank: string;
                leaguePoints: number;
                wins: number;
                losses: number;
            } | null;
            flex: {
                tier: string;
                rank: string;
                leaguePoints: number;
                wins: number;
                losses: number;
            } | null;
        };
        ggtiType: any;
        sampleMatchCount: any;
        primaryChampionName: any;
        traitScores: any;
        featureSummary: any;
        aiSummary: any;
        aiDetail: any;
        shareKey: any;
        analyzedAt: any;
        recentMatches: any;
    }>;
    getSnapshotMatches(snapshotId: number, offset?: number, limit?: number, queueFilter?: string): Promise<{
        items: {
            participantMatchId: any;
            matchId: any;
            queueId: any;
            gameStartAt: any;
            gameDurationSec: any;
            championName: any;
            lane: any;
            role: any;
            win: any;
            kills: any;
            deaths: any;
            assists: any;
            killParticipation: any;
            visionScore: any;
            totalMinionsKilled: any;
            goldEarned: any;
            totalDamageToChampions: any;
            items: number[];
            summonerSpellIds: number[];
            kdaRatio: number;
            featureScores: {
                aggression: number;
                stability: number;
                roaming: number;
                vision: number;
                objective: number;
                growth: number;
                fightJoin: number;
            } | null;
            aiSummary: any;
            aiDetail: any;
            tags: any;
        }[];
        total: number;
        nextOffset: number;
        hasMore: boolean;
    }>;
    getMatchDetail(participantMatchId: number): Promise<{
        participantMatchId: bigint;
        matchId: string;
        queueId: number;
        gameStartAt: Date;
        gameDurationSec: number;
        teamId: number;
        win: boolean;
        aiSummary: string;
        aiDetail: string;
        tags: import("@prisma/client/runtime/library").JsonArray;
        player: {
            participantId: number;
            teamId: number;
            gameName: string;
            tagLine: string;
        };
        teams: {
            teamId: number;
            side: string;
            result: string;
            totalKills: number;
            totalGold: number;
            objectives: {
                baron: number;
                dragon: number;
                riftHerald: number;
                horde: number;
                tower: number;
                inhibitor: number;
            };
            participants: {
                participantId: number;
                teamId: number;
                championId: number;
                championName: string | null;
                summonerName: string;
                tagLine: string | null;
                puuid: string | null;
                level: number;
                win: boolean;
                kills: number;
                deaths: number;
                assists: number;
                kdaRatio: number;
                killParticipation: number;
                visionScore: number;
                wardsPlaced: number;
                wardsKilled: number;
                controlWardsBought: number;
                totalDamageToChampions: number;
                totalDamageTaken: number;
                cs: number;
                csPerMinute: number;
                spells: number[];
                items: number[];
                perks: number[];
                isPlayer: boolean;
                goldEarned: number;
            }[];
        }[];
        playerTeamSide: string;
    }>;
    lookupLatest(dto: LookupAnalysisDto): Promise<{
        found: boolean;
        latestSnapshotId: null;
        snapshot: null;
        pendingRequestId: null;
        pendingStatus: null;
        lastUpdatedAt?: undefined;
    } | {
        found: boolean;
        latestSnapshotId: bigint | null;
        snapshot: {
            snapshotId: any;
            gameName: any;
            tagLine: any;
            profileIconId: any;
            summonerLevel: any;
            currentRanks: {
                solo: {
                    tier: string;
                    rank: string;
                    leaguePoints: number;
                    wins: number;
                    losses: number;
                } | null;
                flex: {
                    tier: string;
                    rank: string;
                    leaguePoints: number;
                    wins: number;
                    losses: number;
                } | null;
            };
            ggtiType: any;
            sampleMatchCount: any;
            primaryChampionName: any;
            traitScores: any;
            featureSummary: any;
            aiSummary: any;
            aiDetail: any;
            shareKey: any;
            analyzedAt: any;
            recentMatches: any;
        } | null;
        pendingRequestId: bigint | null;
        pendingStatus: string | null;
        lastUpdatedAt: Date | null;
    }>;
    enqueueRefresh(dto: CreateAnalysisDto): Promise<{
        requestId: bigint;
        status: string;
        latestSnapshotId: bigint | null;
    }>;
    private runAnalysisNow;
    private processRequest;
    private resolveRiotAccountForRequest;
    private snapshotInclude;
    private formatSnapshot;
    private formatRankQueue;
    private formatRecentMatchItem;
    private buildMatchQueueFilterWhere;
    private createSnapshot;
    private createMatchInsights;
    private resolvePrimaryChampion;
    private avg;
    private buildFallbackMatchSummary;
    private buildFallbackMatchDetail;
    private buildFallbackMatchTags;
    private extractRawParticipant;
    private extractItems;
    private extractSummonerSpellIds;
    private kdaRatio;
    private formatMatchParticipant;
    private formatTeamDetail;
    private extractPerks;
    private extractRiotIdGameName;
    private extractRiotIdTagLine;
    private numericField;
    private stringField;
}
