import sqlite3
import random

# TODO: grab this from a config file instead
DB_PATH = "./gacha_game.db"  # Adjust if needed

def get_db_connection():
    '''Creates a connection to the database'''
    conn = sqlite3.connect(DB_PATH)
    conn.row_factory = sqlite3.Row
    return conn

def get_or_create_user(username):
    '''Retrieves an ID for a given user, if the user does not exist, it will be
    created.'''
    conn = get_db_connection()
    conn.row_factory = sqlite3.Row
    cur = conn.cursor()
    cur.execute('SELECT id FROM users WHERE username = ?', (username,))
    user = cur.fetchone()[0]
    if user:
        conn.close()
        return user

    # New user starts with has_rolled = False
    cur.execute(
        'INSERT INTO users (username, has_rolled) VALUES (?, ?)',
        (username, False)
    )
    conn.commit()
    user_id = cur.lastrowid
    conn.close()
    return user_id

def add_pull(user_id, character_id):
    '''Creates a pull in the database'''
    conn = get_db_connection()
    cur = conn.cursor()
    cur.execute('INSERT INTO pulls (user_id, character_id) VALUES (?, ?)', (user_id, character_id))
    conn.commit()
    conn.close()

def get_config(key):
    '''Reads the value for a specified config key from the db'''
    conn = get_db_connection()
    cur = conn.cursor()
    cur.execute("SELECT value FROM config WHERE key = ?", (key,))
    row = cur.fetchone()
    conn.close()
    return row[0] if row else None

def set_config(key, value):
    '''Writes the value for a specified config key to the db'''
    conn = get_db_connection()
    cur = conn.cursor()
    cur.execute("INSERT OR REPLACE INTO config (key, value) VALUES (?, ?)", (key, value))
    conn.commit()
    conn.close()