import { calculateSaju } from '@/lib/saju-calculator'; import Link from 'next/link'; import PDFButton from '../components/PDFButton'; import ShareButtons from '../components/ShareButtons'; import UserMenu from '@/components/UserMenu'; import { calculateDaeun, getCurrentDaeun, getDaeunDescription } from '@/lib/daeun-calculator'; import { getCurrentSolarTerm, getSolarTermName, getSolarTermMonthBranch } from '@/lib/solar-terms'; import { EARTHLY_BRANCHES_KR, FIVE_ELEMENTS_KR, FIVE_ELEMENTS } from '@/lib/saju-calculator'; import { calculateElementScore, performFullAnalysis } from '@/lib/ai-interpretation'; import AiInterpretationSection from '@/components/AiInterpretationSection'; interface PageProps { searchParams: Promise<{ year: string; month: string; day: string; hour?: string; gender: 'male' | 'female'; calendarType: 'solar' | 'lunar'; originalYear?: string; originalMonth?: string; originalDay?: string; isLeapMonth?: string; }>; } export default async function ResultPage({ searchParams }: PageProps) { const params = await searchParams; const { year, month, day, hour, gender, calendarType, originalYear, originalMonth, originalDay, isLeapMonth } = params; const yearNum = parseInt(year); const monthNum = parseInt(month); const dayNum = parseInt(day); const hourNum = hour ? parseInt(hour) : null; const inputYear = originalYear ? parseInt(originalYear) : yearNum; const inputMonth = originalMonth ? parseInt(originalMonth) : monthNum; const inputDay = originalDay ? parseInt(originalDay) : dayNum; const isLunar = calendarType === 'lunar'; const isLeap = isLeapMonth === 'true'; const sajuData = calculateSaju(yearNum, monthNum, dayNum, hourNum, gender); // 절기 정보 const solarTermIndex = getCurrentSolarTerm(yearNum, monthNum, dayNum); const solarTermName = getSolarTermName(solarTermIndex); const monthBranchIndex = getSolarTermMonthBranch(yearNum, monthNum, dayNum); const monthBranchName = EARTHLY_BRANCHES_KR[monthBranchIndex]; // 종합 분석 수행 const analysis = performFullAnalysis(sajuData); const elementScores = analysis.elementScores; // 대운 계산 const daeunList = calculateDaeun( yearNum, monthNum, dayNum, gender, sajuData.month.stem, sajuData.month.branch ); const currentYear = new Date().getFullYear(); const currentDaeun = getCurrentDaeun(daeunList, currentYear); // 오행 색상 매핑 const elementColors: { [key: string]: string } = { '木': 'text-green-600', '火': 'text-red-500', '土': 'text-yellow-600', '金': 'text-gray-500', '水': 'text-blue-600', }; const elementBgColors: { [key: string]: string } = { '木': 'bg-green-100 border-green-300', '火': 'bg-red-100 border-red-300', '土': 'bg-yellow-100 border-yellow-300', '金': 'bg-gray-100 border-gray-300', '水': 'bg-blue-100 border-blue-300', }; return (
{isLunar ? (
<>
음력 {inputYear}년 {inputMonth}월 {inputDay}일{isLeap && ' (윤달)'} {hourNum !== null && `${hourNum}시`}
(양력 {yearNum}년 {monthNum}월 {dayNum}일)
>
) : (
<>
{yearNum}년 {monthNum}월 {dayNum}일 {hourNum !== null && `${hourNum}시`}
>
)}
{gender === 'male' ? ' 남성' : ' 여성'}
| 구분 | {sajuData.hour &&시주 (時柱) | }일주 (日柱) | 월주 (月柱) | 년주 (年柱) |
|---|---|---|---|---|
| 천간 (天干) | {sajuData.hour && (
{sajuData.hour.stem}
{sajuData.hour.stemKr}
|
)}
{sajuData.day.stem}
{sajuData.day.stemKr}
일간 (日干)
|
{sajuData.month.stem}
{sajuData.month.stemKr}
|
{sajuData.year.stem}
{sajuData.year.stemKr}
|
| 지지 (地支) | {sajuData.hour && (
{sajuData.hour.branch}
{sajuData.hour.branchKr}
|
)}
{sajuData.day.branch}
{sajuData.day.branchKr}
|
{sajuData.month.branch}
{sajuData.month.branchKr}
|
{sajuData.year.branch}
{sajuData.year.branchKr}
|
|
지장간 (藏干)
숨은 천간
|
{(() => {
const pillars = sajuData.hour
? [analysis.hiddenStems.find(h => h.pillar === '시주'), analysis.hiddenStems.find(h => h.pillar === '일주'), analysis.hiddenStems.find(h => h.pillar === '월주'), analysis.hiddenStems.find(h => h.pillar === '년주')]
: [analysis.hiddenStems.find(h => h.pillar === '일주'), analysis.hiddenStems.find(h => h.pillar === '월주'), analysis.hiddenStems.find(h => h.pillar === '년주')];
return pillars.map((h, idx) => (
{h && (
{h.stems.map((s, si) => (
{s.stemKr}({FIVE_ELEMENTS_KR[s.element as keyof typeof FIVE_ELEMENTS_KR]})
))}
)}
|
));
})()}
|||
| 십성 (十星) | {sajuData.hour && (
{sajuData.hour.tenGod}
|
)}
{sajuData.day.tenGod}
|
{sajuData.month.tenGod}
|
{sajuData.year.tenGod}
|
| 십이운성 | {sajuData.hour && (
{sajuData.hour.fortune}
|
)}
{sajuData.day.fortune}
|
{sajuData.month.fortune}
|
{sajuData.year.fortune}
|
{analysis.yongShin.explanation}
특별한 신살이 발견되지 않았습니다.
)}{analysis.gongmang.description}
{getDaeunDescription(currentDaeun, sajuData.day.stem)}
오늘의 운을 확인하기
두 사람의 궁합 확인