"use server";

import { streamAIResponse } from "@/lib/ai/stream";
import {
  formatLiuyaoTimingForPrompt,
  getTimingInfoWithLongitude,
} from "@/lib/calc/timing";
import {
  extractChangeDetails,
  extractZhangMingRen,
  readGuaMarkdown,
} from "@/lib/content/zhouyi";
import { LIUYAO_SYSTEM_PROMPT } from "@/lib/prompts";

export interface LiuyaoInput {
  question: string;
  calcDate: string;
  calcTime: string;
  locationName: string;
  longitude: number;
  guaMark: string;
  guaTitle: string;
  guaResult: string;
  guaChange: string;
}

export async function getLiuyaoAnswer(input: LiuyaoInput) {
  const { timing, trueSolarTime } = getTimingInfoWithLongitude(
    input.calcDate,
    input.calcTime,
    input.longitude,
  );
  const timingText = formatLiuyaoTimingForPrompt(
    timing,
    trueSolarTime,
    input.locationName,
    input.longitude,
  );

  let guaDetailText = "";
  try {
    const guaDetail = await readGuaMarkdown(input.guaMark);
    const explain = extractZhangMingRen(guaDetail) ?? "";
    const changeList = extractChangeDetails(
      guaDetail,
      input.guaChange,
      input.guaTitle,
    );
    guaDetailText = [explain, changeList.join("\n")].filter(Boolean).join("\n");
  } catch {
    guaDetailText = "";
  }

  return streamAIResponse(
    LIUYAO_SYSTEM_PROMPT,
    `${timingText}

【卦象】
${input.guaTitle} ${input.guaResult} ${input.guaChange}

【问事】
${input.question}

${guaDetailText}`,
  );
}
