import { createChart } from './chart'; import type { BaziChart, FourPillarsInput, Pillar, RootPosition, RootsContext, } from './types'; function collectPillarRoots( chart: BaziChart, pillar: Pillar, ): RootPosition[] { return pillar.branch.hiddenStems.flatMap((hiddenStem, index) => { if (hiddenStem.element !== chart.dayMaster.element) return []; return [{ pillar: pillar.key, branch: pillar.branch.name, hiddenStem: hiddenStem.name, order: hiddenStem.order, source: `${pillar.key}.branch.hiddenStems[${index}]`, }]; }); } export function detectRoots(chart: BaziChart): RootsContext { const pillars = [ chart.pillars.year, chart.pillars.month, chart.pillars.day, chart.pillars.hour, ]; const roots = pillars.flatMap((pillar) => collectPillarRoots(chart, pillar)); return { model: 'roots-v1', dayMaster: chart.dayMaster, hasRoot: roots.length > 0, roots, }; } export function detectPillarRoots(pillars: FourPillarsInput): RootsContext { return detectRoots(createChart(pillars)); }