from datetime import datetime
import sqlite3



# Claim a single code, or fetch it if already claimed
claim_email = 'EX@AMPLE.com'  # TODO -- populate from API request

conn = sqlite3.connect('vrchat_codes.db')
c = conn.cursor()


c.execute(f"SELECT code FROM codes WHERE assigned_to IS '{claim_email}' LIMIT 1") 
row = c.fetchone()

if row is not None:
  vrce_code = row[0]
  print(f"A code is already claimed for {claim_email}: ", vrce_code)
  # output dates
  c.execute("SELECT assigned_timestamp, event_triggered_timestamp FROM codes WHERE assigned_to IS ?", (claim_email,))
  row = c.fetchone()
  print(f"  assigned_timestamp: {row[0]}")
  print(f"  event_triggered_timestamp: {row[1]}")
else:
  c.execute("SELECT code FROM codes WHERE assigned_to IS NULL LIMIT 1")
  row = c.fetchone()
  if row is None:
    print("No more unassigned codes available in the database. Stopping.")
    exit()  # TODO -- Raise error to API response
  vrce_code = row[0]
  c.execute("UPDATE codes SET assigned_to = ?, assigned_timestamp = ? WHERE code = ?", (claim_email, datetime.now().strftime("%Y-%m-%d %H:%M:%S"), vrce_code))
  print(f"Claimed code {vrce_code} for {claim_email}.")
  conn.commit()

## TODO -- Return vrce_code with API response
if 'vrce_code' in locals():
  print("Returning code:", vrce_code)


conn.close()