import { getPlacementsFromASCII } from './asciiParser'; const zodOrder = ["ARIES", "TAURUS", "GEMINI", "CANCER", "LEO", "VIRGO", "LIBRA", "SCORPIO", "SAGITTARIUS", "CAPRICORN", "AQUARIUS", "PISCES"]; export function generateCombinedTransitTable( natalAscii: string, transitAscii: string, options: { natalName: string, transitDateTime: string } ): string { const natalResult = getPlacementsFromASCII(natalAscii); const transitResult = getPlacementsFromASCII(transitAscii); if (typeof natalResult === 'string') return natalResult; if (typeof transitResult === 'string') return `Transit Error: ${transitResult}`; const { placements: natalPlacements } = natalResult; const { placements: transitPlacements, chartTitle: transitChartTitle } = transitResult; // Find Natal Lagna Sign let natalAscSign = "Unknown"; zodOrder.forEach(sign => { if (natalPlacements[sign] && natalPlacements[sign].includes("As")) { natalAscSign = sign; } }); // Find Transit Lagna Sign (if exists) let transitAscSign = "Unknown"; zodOrder.forEach(sign => { if (transitPlacements[sign] && transitPlacements[sign].includes("As")) { transitAscSign = sign; } }); const getHouseNumber = (sign: string, ascSign: string) => { if (ascSign === "Unknown") return null; const lagnaIdx = zodOrder.indexOf(ascSign); const signIdx = zodOrder.indexOf(sign); return ((signIdx - lagnaIdx + 12) % 12) + 1; }; const transitName = transitChartTitle || 'Transit'; let output = `### Transit Analysis\n`; output += `**Natal Chart**: ${options.natalName}\n`; output += `**Transit Chart**: ${transitName}\n`; output += `**Transit Date/Time**: ${options.transitDateTime || 'Not specified'}\n\n`; output += `| Sign | H (natal ${options.natalName}) | Planet (natal ${options.natalName}) | H (transit ${transitName}) | Planet (transit ${transitName}) |\n`; output += `| :--- | :--- | :--- | :--- | :--- |\n`; // Collect rows first to allow sorting by Natal House const rows = zodOrder.map(sign => { const nHouse = getHouseNumber(sign, natalAscSign); const tHouse = getHouseNumber(sign, transitAscSign); const nPlanets = natalPlacements[sign] || []; const tPlanets = transitPlacements[sign] || []; return { nHouse: nHouse || 0, text: `| ${sign} | H${nHouse || '?'} | ${nPlanets.join(", ")} | H${tHouse || '?'} | ${tPlanets.join(", ")} |` }; }); // Sort by Natal House (1 to 12) rows.sort((a, b) => a.nHouse - b.nHouse); output += rows.map(r => r.text).join('\n'); return output; }