#!/usr/bin/env python3

# Copyright (c) 2026 Bible Code Lab
# You may share and modify this code only for the purpose of improvement.
# Modifications intended to alter, bias, or manipulate computational results,
# or to introduce malicious behavior, are strictly prohibited.
# This software is provided "as is", without warranty of any kind.
# 
# SCRIPT NAME:  kjv-verses-to-dict.py
#
# DESCRIPTION:  Generates a Mispar ha-Akhor gematria dictionary of the KJV Bible verses
#
# AUTHOR:       Bible Code Lab
#
# DATE:         2026-02-13
#
# VERSION:      1.0
#
# TESTED ON:    Python 3.13.5
#
# USAGE:        $ python3 kjv-verses-to-dict.py

import re
import json
import urllib.request

url = 'https://kjvcode.com/wp-content/uploads/2024/05/Holy-Bible-King-James-Version-Entire-Bible-Concord.txt'
filename = 'Holy-Bible-King-James-Version-Entire-Bible-Concord.txt'

def weighted_gematria(text: str) -> int:
    total = 0
    cont = 1
    for ch in text.upper():
        if 'A' <= ch <= 'Z':
            total += (ord(ch) - ord('A') + 1) * cont
            cont = cont + 1
    return total

urllib.request.urlretrieve(url, filename)

with open(filename, 'r') as file:
    kjv_wg_dict = {}
    for line in file:
        verse = line.strip()
        verse = re.sub(r'^[A-Z]+.+','',verse)
        k = weighted_gematria(verse)
        if k == 0:
            continue
        if (k in kjv_wg_dict):
            kjv_wg_dict[k].append(verse)
        else:
            list = []
            list.append(verse)
            kjv_wg_dict.update({k:list})

    kjv_wg_dict_filtered = {}
    for k in kjv_wg_dict:
        verse_list = kjv_wg_dict[k]
        if len(verse_list) > 1:
            kjv_wg_dict_filtered.update({k:verse_list})
            
    file1 = open('kjv-wg-verse-dict-full.txt', 'w')
    file2 = open('kjv-wg-verse-dict-filtered.txt', 'w')
    print(json.dumps(kjv_wg_dict, sort_keys=True, indent=4), file = file1)
    print(json.dumps(kjv_wg_dict_filtered, sort_keys=True, indent=4), file = file2)
    file1.close()
    file2.close()