from sqlite3 import Cursor

from game import CURRENCY_NAME, MRO_NAME, BANK_NAME


def seed(cursor: Cursor):
    print(' - Seeding initial data...')
    # â‚­ollar
    cursor.executemany('''
                    INSERT OR IGNORE INTO ownables
                    (name)
                    VALUES (?)
                    ''', [
        (CURRENCY_NAME,),
        (MRO_NAME,),
    ])
    # The bank/external investors
    cursor.execute('''
                    INSERT OR IGNORE INTO users
                    (username,password)
                    VALUES (?,'')
                    ''', (BANK_NAME,))

    # bank owns some stuff
    cursor.execute('''
    INSERT OR IGNORE INTO ownership
    (user_id, ownable_id, amount)
    SELECT (SELECT rowid FROM users WHERE username = ?), 
            ownables.rowid, 
            (SELECT COALESCE(SUM(amount),0) FROM ownership WHERE ownable_id = ownables.rowid)
    FROM ownables
    ''', (BANK_NAME, ))
    cursor.executemany('''
    INSERT INTO global_control_values (value_name, value)
    WITH new_value AS (SELECT ? AS name, ? AS value)
    SELECT new_value.name, new_value.value
    FROM new_value
    WHERE NOT EXISTS(SELECT * -- TODO test if this works
                     FROM global_control_values v2
                     WHERE v2.value_name = new_value.name
                       AND v2.value = new_value.value
                       AND v2.dt = (SELECT MAX(v3.dt)
                                    FROM global_control_values v3
                                    WHERE v3.value_name = new_value.name
                                      AND v3.value = new_value.value))
    ''', [('banking_license_price', 5e6),
          ('personal_loan_interest_rate', 0.1),  # may seem a lot but actually this is a credit that you get without any assessment involved
          ('deposit_facility', -0.005),  # ECB 2020
          ('marginal_lending_facility', 0.0025),  # ECB 2020
          ('cash_reserve_ratio', 0.01),  # Eurozone 2020
          ('cash_reserve_free_amount', 1e5),  # Eurozone 2020
          ('main_refinancing_operations', 0.0000),  # ECB 2020
          ])