diff --git a/src/spacetraders_client.gleam b/src/spacetraders_client.gleam index 3eab857..cd68875 100644 --- a/src/spacetraders_client.gleam +++ b/src/spacetraders_client.gleam @@ -2,7 +2,9 @@ import birl import env import gleam/int import gleam/io +import gleam/list import gleam/option +import gleam/uri import gleam_community/ansi import spacetraders_api import spacetraders_models/account_id @@ -12,11 +14,9 @@ import spacetraders_models/waypoint_symbol pub fn main() -> Nil { let assert Ok(env.Env(agent_token:, ..)) = env.load_dotenv() - let assert Ok(server_status) = spacetraders_api.get_server_status() - let assert Ok(account) = spacetraders_api.get_account(agent_token) - let assert Ok(agent) = spacetraders_api.get_agent(agent_token) - let now = birl.now() io.println("") + + let assert Ok(account) = spacetraders_api.get_account(agent_token) io.println(ansi.bold(ansi.underline(ansi.blue("Account")))) io.println(ansi.bold("Id:\t\t") <> account_id.to_string(account.id)) case account.email { @@ -25,6 +25,8 @@ pub fn main() -> Nil { } io.println(ansi.bold("Created At:\t") <> birl.to_iso8601(account.created_at)) io.println("") + + let assert Ok(agent) = spacetraders_api.get_agent(agent_token) io.println(ansi.bold(ansi.underline(ansi.magenta("Agent")))) io.println(ansi.bold("Symbol:\t\t") <> agent_symbol.to_string(agent.symbol)) io.println( @@ -37,13 +39,62 @@ pub fn main() -> Nil { ) io.println(ansi.bold("Ship Count:\t") <> int.to_string(agent.ship_count)) io.println("") - io.println(ansi.italic( - "Server last reset " + + let assert Ok(server_status) = spacetraders_api.get_server_status() + let now = birl.now() + io.println(ansi.bold(ansi.underline(ansi.green("Server")))) + io.println(ansi.bold("Version:\t") <> server_status.version) + io.println(ansi.bold("Status:\t\t") <> server_status.status) + io.println( + ansi.bold("Last Reset:\t") <> birl.legible_difference(now, server_status.reset_date), - )) - io.println(ansi.italic( - "Server will next reset " - <> birl.legible_difference(now, server_status.server_resets.next), - )) + ) + io.println( + ansi.bold("Next Reset:\t") + <> birl.legible_difference(now, server_status.server_resets.next) + <> " (" + <> ansi.italic(server_status.server_resets.frequency) + <> ")", + ) + case server_status.health.last_market_update { + option.Some(last_market_update) -> + io.println( + ansi.bold("Market Updated:\t") + <> birl.legible_difference(now, last_market_update), + ) + option.None -> Nil + } + io.println("") + + io.println(ansi.bold(ansi.underline(ansi.blue("Links")))) + list.each(server_status.links, fn(link) { + io.println(ansi.bold(link.name) <> ": " <> uri.to_string(link.url)) + }) + io.println("") + + io.println( + ansi.bold(ansi.underline(ansi.yellow("Leaderboard - Most Credits"))), + ) + list.each(server_status.leaderboards.most_credits, fn(entry) { + io.println( + ansi.bold(agent_symbol.to_string(entry.agent_symbol)) + <> ": " + <> int.to_string(entry.credits), + ) + }) + io.println("") + + io.println( + ansi.bold( + ansi.underline(ansi.yellow("Leaderboard - Most Submitted Charts")), + ), + ) + list.each(server_status.leaderboards.most_submitted_charts, fn(entry) { + io.println( + ansi.bold(agent_symbol.to_string(entry.agent_symbol)) + <> ": " + <> int.to_string(entry.chart_count), + ) + }) io.println("") }