class Stytch::Users

def create(

def create(
  email: nil,
  phone_number: nil,
  name: {},
  create_user_as_pending: false,
  attributes: {}
)
  request = {
    email: email,
    phone_number: phone_number,
    create_user_as_pending: create_user_as_pending
  }
  request[:name] = name if name != {}
  request[:attributes] = attributes if attributes != {}
  post_request(PATH, request)
end

def delete(user_id:)

def delete(user_id:)
  delete_request("#{PATH}/#{user_id}")
end

def delete_crypto_wallet(

def delete_crypto_wallet(
  crypto_wallet_id:
)
  delete_request("#{PATH}/crypto_wallets/#{crypto_wallet_id}")
end

def delete_email(

def delete_email(
  email_id:
)
  delete_request("#{PATH}/emails/#{email_id}")
end

def delete_phone_number(

def delete_phone_number(
  phone_id:
)
  delete_request("#{PATH}/phone_numbers/#{phone_id}")
end

def delete_totp(

def delete_totp(
  totp_id:
)
  delete_request("#{PATH}/totps/#{totp_id}")
end

def delete_webauthn_registration(

def delete_webauthn_registration(
  webauthn_registration_id:
)
  delete_request("#{PATH}/webauthn_registrations/#{webauthn_registration_id}")
end

def format_emails(emails)

def format_emails(emails)
  e = []
  emails.each { |email| e << { email: email } }
  e
end

def format_phone_numbers(phone_numbers)

def format_phone_numbers(phone_numbers)
  p = []
  phone_numbers.each { |phone_number| p << { phone_number: phone_number } }
  p
end

def get(user_id:)

def get(user_id:)
  get_request("#{PATH}/#{user_id}")
end

def get_pending(

def get_pending(
  limit: nil,
  starting_after_id: nil
)
  query_params = {
    limit: limit,
    starting_after_id: starting_after_id
  }
  request = request_with_query_params("#{PATH}/pending", query_params)
  get_request(request)
end

def initialize(connection)

def initialize(connection)
  @connection = connection
end

def search(query, limit: 100, cursor: nil)

def search(query, limit: 100, cursor: nil)
  request = {
    query: query,
    limit: limit
  }
  request[:cursor] = cursor if cursor
  post_request("#{PATH}/search", request)
end

def search_all(query, limit: 100)

def search_all(query, limit: 100)
  Enumerator.new do |enum|
    cursor = nil
    loop do
      resp = search(query, limit: limit, cursor: cursor)
      resp['results'].each do |user|
        enum << user
      end
      cursor = resp['results_metadata']['next_cursor']
      break if cursor.nil?
    end
  end
end

def update(

def update(
  user_id:,
  name: {},
  emails: [],
  phone_numbers: [],
  crypto_wallets: [],
  attributes: {}
)
  request = {
    emails: format_emails(emails),
    phone_numbers: format_phone_numbers(phone_numbers),
    crypto_wallets: crypto_wallets
  }
  request[:name] = name if name != {}
  request[:attributes] = attributes if attributes != {}
  put_request("#{PATH}/#{user_id}", request)
end