import { Injectable } from '@nestjs/common';
import { ChatMessage } from './vllm-client.service';

export type TraitScores = {
  aggression: number;
  stability: number;
  roaming: number;
  vision: number;
  objective: number;
  growth: number;
  fightJoin: number;
};

@Injectable()
export class PromptBuilderService {
  buildPlayerAnalysisPrompt(input: {
    gameName: string;
    ggtiType: string;
    sampleMatchCount: number;
    primaryChampions: string[];
    traitScores: TraitScores;
    behaviorSummary: Record<string, unknown>;
  }): ChatMessage[] {
    return [
      {
        role: 'system',
        content:
          '너는 리그오브레전드 플레이 분석 AI다. 제공된 Match/Timeline feature만 근거로 분석하고 없는 사실은 만들지 않는다. 반드시 JSON만 응답한다.',
      },
      {
        role: 'user',
        content: JSON.stringify({
          task: 'generate_player_style_analysis',
          locale: 'ko-KR',
          player: {
            gameName: input.gameName,
            sampleMatchCount: input.sampleMatchCount,
            primaryChampions: input.primaryChampions,
          },
          ggti: {
            type: input.ggtiType,
            traitScores: input.traitScores,
          },
          matchBehaviorSummary: input.behaviorSummary,
          outputFormat: {
            summary: 'string, max 80 chars',
            detail: 'string, 2-4 sentences',
            strengths: ['string', 'max 3 items'],
            habits: ['string', 'max 3 items'],
            duoTip: 'string, max 120 chars',
            cardTitle: 'string, max 32 chars',
            cardSubtitle: 'string, max 60 chars',
          },
        }),
      },
    ];
  }

  buildMatchAnalysisPrompt(input: {
    gameName: string;
    championName: string;
    queueId: number;
    win: boolean;
    lane: string | null;
    role: string | null;
    stats: {
      kills: number;
      deaths: number;
      assists: number;
      visionScore: number;
      totalMinionsKilled: number;
      neutralMinionsKilled: number;
      goldEarned: number;
      totalDamageToChampions: number;
      killParticipation: number | null;
    };
    timelineSummary: Record<string, unknown>;
  }): ChatMessage[] {
    return [
      {
        role: 'system',
        content:
          '너는 리그오브레전드 단일 경기 플레이 분석 AI다. 제공된 경기 기록과 feature만 근거로 평가하고 없는 사실은 만들지 않는다. 반드시 JSON만 응답한다.',
      },
      {
        role: 'user',
        content: JSON.stringify({
          task: 'generate_match_play_analysis',
          locale: 'ko-KR',
          player: {
            gameName: input.gameName,
            championName: input.championName,
            queueId: input.queueId,
            result: input.win ? 'WIN' : 'LOSE',
            lane: input.lane,
            role: input.role,
          },
          matchStats: input.stats,
          timelineSummary: input.timelineSummary,
          outputFormat: {
            summary: 'string, max 70 chars',
            detail: 'string, 2-3 sentences',
            tags: ['string', 'max 3 items'],
          },
        }),
      },
    ];
  }
}
