require "uri"
require "base64"
require "crypto/bcrypt/password"

include CrystalGauntlet

CrystalGauntlet.endpoints["/getGJUsers20.php"] = ->(context : HTTP::Server::Context): String {
  params = URI::Params.parse(context.request.body.not_nil!.gets_to_end)
  LOG.debug { params.inspect }

  page = params["page"].to_i
  results = [] of String
  username = params["str"] + "%"

  DATABASE.query("select username, id, coins, user_coins, icon_type, cube, ship, ball, ufo, wave, robot, spider, color1, color2, special, udid, account_id, stars, creator_points, demons from users where id = ? or username like ? order by stars desc limit 10 offset #{page * 10}", params["str"], username) do |rs|
    rs.each do
      username = rs.read(String)
      id = rs.read(Int32)
      coins = rs.read(Int32)
      user_coins = rs.read(Int32)
      icon_type = rs.read(Int32)
      icon_value = [rs.read(Int32), rs.read(Int32), rs.read(Int32), rs.read(Int32), rs.read(Int32), rs.read(Int32), rs.read(Int32)][icon_type]
      color1 = rs.read(Int32)
      color2 = rs.read(Int32)
      special = rs.read(Int32)
      udid = rs.read(String | Nil)
      account_id = rs.read(Int32 | Nil)
      stars = rs.read(Int32)
      creator_points = rs.read(Int32)
      demons = rs.read(Int32)

      results << Format.fmt_hash({
        1 => username,
        2 => id,
        3 => stars,
        4 => demons,
        8 => creator_points,
        9 => icon_value,
        10 => color1,
        11 => color2,
        13 => coins,
        14 => icon_type,
        15 => special,
        16 => account_id || udid,
        17 => user_coins,
      })
    end
  end

  amount = DATABASE.scalar("select count(*) from users where id = ? or username like ?", params["str"], username)
  response = [results.join("|"), "#{amount}:#{page * 10}:10"].join("#")

  response
}
