File size: 5,770 Bytes
8ab43a3
 
 
 
 
 
 
 
24f87c3
 
8ab43a3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
import os
import sys
import json
import sqlite3
from datetime import datetime
from logger import get_sage_logger

# Setup absolute paths
# Changed to use the local copy inside the repo
PSALM_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "daily_psalms_api"))

# Configure logging
logger = get_sage_logger("spiritual_bridge")

def get_oracle_data(name: str = "", topic: str = "", date_str: str = ""):
    """
    Unified Oracle Tool backend. Queries Sura, Psalm, and Bible results.
    date_str format: YYYY-MM-DD. 
    Supports partials: YYYY-00-00 (whole year), YYYY-MM-00 (whole month).
    """
    sys.path.append(PSALM_DIR)
    original_cwd = os.getcwd()
    os.chdir(PSALM_DIR)
    try:
        from gematria import calculate_gematria
        from utils import date_to_words as ps_date_to_words
        import torah
        import math

        # 1. Date Handling (Partial Awareness)
        clean_date = date_str.replace("-00-00", "").replace("-00", "")
        if not clean_date:
            clean_date = datetime.now().strftime("%Y-%m-%d")
        
        # API's utils.py handles YYYY-MM-DD, YYYY-MM, and YYYY
        date_words = ps_date_to_words(clean_date)
        logger.info(f"DEBUG: Date '{clean_date}' converted to words: '{date_words}'")
        
        search_input = f"{name} {topic}".strip()
        combined = f"{search_input} {date_words}".strip()
        gematria_sum = calculate_gematria(combined)
        logger.info(f"DEBUG: Search combined: '{combined}' | Gematria: {gematria_sum}")
        
        # Constant for Genesis ELS search
        ADJUSTMENT_CONSTANT = 137.035999177
        adjusted_sum = math.ceil(gematria_sum + (gematria_sum / ADJUSTMENT_CONSTANT))
        logger.info(f"DEBUG: Adjusted Gematria for ELS: {adjusted_sum}")
        
        # 2. Get ELS Result from Genesis
        logger.info(f"DEBUG: Calling torah.process_json_files for Genesis ELS...")
        els_results = torah.process_json_files(1, 1, adjusted_sum, "1,-1", 0, "en", True, True, True, True)
        if not els_results:
            logger.warning(f"DEBUG: No ELS result for Adjusted Sum {adjusted_sum}")
            return {"error": "No prophetic signal found in the depths of time."}
            
        els_text_heb = els_results[0].get("result_text", "")
        els_text_eng = els_results[0].get("translated_text", "")
        logger.info(f"DEBUG: ELS Raw (Heb): {els_text_heb} | ELS Trans (Eng): {els_text_eng}")

        if not els_text_eng or els_text_eng == els_text_heb:
            from deep_translator import GoogleTranslator
            try: 
                els_text_eng = GoogleTranslator(source='auto', target='en').translate(els_text_heb)
                logger.info(f"DEBUG: Fallback translation successful: {els_text_eng}")
            except Exception as te: 
                els_text_eng = els_text_heb
                logger.error(f"DEBUG: Fallback translation failed: {te}")

        els_gematria = calculate_gematria(els_text_heb)
        logger.info(f"DEBUG: Revelation Gematria Signal: {els_gematria}")
        
        # 3. Fetch Matches (Psalm, Sura, Bible)
        results_payload = {
            "query_context": {
                "name": name,
                "topic": topic,
                "date": date_str,
                "signal_strength": els_gematria
            },
            "els_revelation": {
                "original": els_text_heb,
                "english": els_text_eng
            },
            "wisdom_nodes": []
        }

        # Helper to find matches in multiple DBs
        def find_match(db_path, query, book_filter=None):
            logger.info(f"DEBUG: Matching Gematria {query} in {db_path} (Filter: {book_filter})")
            with sqlite3.connect(db_path) as conn:
                cursor = conn.cursor()
                sql = "SELECT words, translation, book, chapter, verse FROM results WHERE gematria_sum = ?"
                if book_filter: sql += f" AND book = '{book_filter}'"
                sql += " ORDER BY LENGTH(words) ASC LIMIT 1"
                cursor.execute(sql, (query,))
                match = cursor.fetchone()
                if match: logger.info(f"DEBUG: Found match in {db_path}: {match[2]} {match[3]}:{match[4]}")
                else: logger.info(f"DEBUG: No match in {db_path}")
                return match

        # [A] Psalm Match
        ps_match = find_match("gematria.db", els_gematria, "Psalms")
        if ps_match:
            results_payload["wisdom_nodes"].append(format_wisdom(ps_match, "Biblical Psalm"))

        # [B] Sura Match
        sura_match = find_match("abjad.db", els_gematria)
        if sura_match:
            results_payload["wisdom_nodes"].append(format_wisdom(sura_match, "Quranic Sura"))

        # [C] Bible Verse Match (Revelation)
        bible_match = find_match("bible.db", els_gematria, "Revelation")
        if bible_match:
            results_payload["wisdom_nodes"].append(format_wisdom(bible_match, "NT Prophecy"))

        logger.info(f"DEBUG: Final payload contains {len(results_payload['wisdom_nodes'])} wisdom nodes.")
        return results_payload

    except Exception as e:
        logger.error(f"Oracle Tool Error: {e}")
        return {"error": str(e)}
    finally:
        os.chdir(original_cwd)
        if PSALM_DIR in sys.path: sys.path.remove(PSALM_DIR)

def format_wisdom(match, category):
    words, trans, book, ch, vs = match
    if not trans or trans == words:
        try:
            from deep_translator import GoogleTranslator
            trans = GoogleTranslator(source='auto', target='en').translate(words)
        except: trans = words
    return {
        "category": category,
        "reference": f"{book} {ch}:{vs}",
        "original": words,
        "english": trans
    }