import re
import mysql.connector
from types import SimpleNamespace
from database_i import get_connection
from config_i import config

def update_tungsten_balance(user_id: str, tungsten_balance: int) -> bool:
    # Connect to databases
    atavism_conn = get_connection(config.db.atavism.master)
    cursor = atavism_conn.cursor()
    # Get character_id
    cursor.execute("SELECT character_id FROM account_character WHERE account_id = %s", (user_id,))
    result = cursor.fetchone()
    if not result:
        print("No character found.")
        return False
    character_id = result[0]

    # Switch to objstore
    atavism_conn = get_connection(config.db.atavism.atavism)
    cursor = atavism_conn.cursor()
    cursor.execute("SELECT data FROM objstore WHERE obj_id = %s AND type = 'Bag'", (character_id,))
    result = cursor.fetchone()
    if not result:
        print("No Bag entry found.")
        return False
    blob = result[0].decode('utf-8')


    # Parse and modify the blob
    lines = blob.splitlines()
    inside_currencies = False
    found = False

    for i, line in enumerate(lines):
        if not inside_currencies and 'property="currencies"' in line:
            inside_currencies = True
            continue

        if inside_currencies and '<int>1</int>' in line.strip():
            for j in range(i+1, min(i+10, len(lines))):
                if re.match(r"\s*<long>\d+</long>", lines[j]):
                    lines[j] = re.sub(r"\d+", str(tungsten_balance), lines[j], count=1)
                    found = True
                    break
            break

    if not found:
        print("TR1T currency entry not found.")
        return False

    updated_blob = "\n".join(lines)

    # Write back
    update_cursor = atavism_conn.cursor()
    update_cursor.execute("UPDATE objstore SET data = %s WHERE obj_id = %s AND type = 'Bag'", (updated_blob, character_id))
    atavism_conn.commit()
    #print("Balance updated.")
    return True


if __name__ == "__main__":
    import sys

    if len(sys.argv) != 3:
        print("Usage: python update_tungsten_balance.py <user_id> <smr_balance>")
        sys.exit(1)

    user_id = sys.argv[1]
    try:
        tungsten_balance = int(sys.argv[2])
    except ValueError:
        print("tungsten_balance must be an integer.")
        sys.exit(1)

    success = update_tungsten_balance(user_id, tungsten_balance)
    if not success:
        sys.exit(1)
