export const ZODIAC_SIGNS = [ "ARIES", "TAURUS", "GEMINI", "CANCER", "LEO", "VIRGO", "LIBRA", "SCORPIO", "SAGITTARIUS", "CAPRICORN", "AQUARIUS", "PISCES" ]; export const SIGN_LORDS: Record = { ARIES: "Mars", TAURUS: "Venus", GEMINI: "Mercury", CANCER: "Moon", LEO: "Sun", VIRGO: "Mercury", LIBRA: "Venus", SCORPIO: "Mars", SAGITTARIUS: "Jupiter", CAPRICORN: "Saturn", AQUARIUS: "Saturn", PISCES: "Jupiter" }; export const DIGNITY_RULES: Record = { Su: { exalted: "ARIES", debilitated: "LIBRA" }, Mo: { exalted: "TAURUS", debilitated: "SCORPIO" }, Ma: { exalted: "CAPRICORN", debilitated: "CANCER" }, Me: { exalted: "VIRGO", debilitated: "PISCES" }, Ju: { exalted: "CANCER", debilitated: "CAPRICORN" }, Ve: { exalted: "PISCES", debilitated: "VIRGO" }, Sa: { exalted: "LIBRA", debilitated: "ARIES" }, Ra: { exalted: "TAURUS", debilitated: "SCORPIO" }, Ke: { exalted: "SCORPIO", debilitated: "TAURUS" } }; export const MOOLATRIKONA_RULES: Record = { Su: { sign: "LEO", range: [0, 20] }, Mo: { sign: "TAURUS", range: [3, 30] }, Ma: { sign: "ARIES", range: [0, 12] }, Me: { sign: "VIRGO", range: [15, 20] }, Ju: { sign: "SAGITTARIUS", range: [0, 10] }, Ve: { sign: "LIBRA", range: [0, 15] }, Sa: { sign: "AQUARIUS", range: [0, 20] }, Ra: { sign: "VIRGO", range: [0, 30] }, Ke: { sign: "PISCES", range: [0, 30] } }; export const OWN_SIGNS: Record = { Su: ["LEO"], Mo: ["CANCER"], Ma: ["ARIES", "SCORPIO"], Me: ["GEMINI", "VIRGO"], Ju: ["SAGITTARIUS", "PISCES"], Ve: ["TAURUS", "LIBRA"], Sa: ["CAPRICORN", "AQUARIUS"] }; export function getDignityLabel(planetCode: string, sign: string, degree: number = 0): string { const planet = planetCode.substring(0, 2); // Handle both 'Sun' and 'Su' const mapping: Record = { 'Su': 'Su', 'Sun': 'Su', 'Mo': 'Mo', 'Moo': 'Mo', 'Ma': 'Ma', 'Mar': 'Ma', 'Me': 'Me', 'Mer': 'Me', 'Ju': 'Ju', 'Jup': 'Ju', 'Ve': 'Ve', 'Ven': 'Ve', 'Sa': 'Sa', 'Sat': 'Sa', 'Ra': 'Ra', 'Rah': 'Ra', 'Ke': 'Ke', 'Ket': 'Ke' }; const code = mapping[planet] || planet; // 1. Exaltation/Debilitation const rules = DIGNITY_RULES[code]; if (rules) { if (sign === rules.exalted) return "EXALTED"; if (sign === rules.debilitated) return "DEBILITATED"; } // 2. Moolatrikona const mt = MOOLATRIKONA_RULES[code]; if (mt && sign === mt.sign && degree >= mt.range[0] && degree <= mt.range[1]) { return "MOOLATRIKONA"; } // 3. Own Sign const own = OWN_SIGNS[code]; if (own && own.includes(sign)) return "OWN SIGN"; return "-"; }