#!/bin/sh

file="/tmp/panel-btc-module"

# Enable mathematics in POSIX shell
calc() { awk "BEGIN { printf(\"%.2f\", $*) }"; }

data() {
	[ -z "$1" ] && return 1

	url="$1"
	curl --location --request GET --silent "$url"
}

output() {
	[ -z "$1" ] && return 1

	# Get symbol and color
	difference="$1"
	possitive=$(calc "$difference >= 0" | cut -c 1)
	if [ "$possitive" -eq 1 ]; then
		symbol=""
		color="$COLOR2"
	else
		symbol=""
		color="$COLOR1"
	fi

	# Result
	# >>> session=xorg
	echo "%{F$color}$symbol $difference%%{F$COLOR15}"
	# <<<
	# >>> session=wayland
	# echo "<span color='$color'>$symbol $difference%</span>"
	# <<<
}

if [ ! -f "$file" ]; then
	touch "$file"
else
	# Only pull if older than 10 seconds
	lastModified=$(calc "$(date +%s) - $(date +%s -r $file) >= 10" | cut -c 1)
	if [ "$lastModified" -eq 0 ]; then cat "$file"; exit; fi
fi

# Get dates
date_last_week_start="$(date --date 'last week' +%s000)"
date_last_week_end=$(calc "$date_last_week_start + (1000 * 60 * 60)") # +1h
date_last_week_end=${date_last_week_end%.00} # cut off ".00" at the end

# API URLs
url="https://api.coincap.io/v2/assets/bitcoin"
url_last_week="${url}/history?interval=h1&start=${date_last_week_start}&end=${date_last_week_end}"

# Current price
data="$(data "$url")"
data_first_character="$(echo "$data" | cut -c 1)"
if [ "$data_first_character" != "{" ]; then cat "$file"; exit; fi
price="$(echo "$data" | jq --compact-output --raw-output '.data.priceUsd')"
price=$(calc "$price")

# Get yesterdays difference
difference_yesterday="$(echo "$data" | jq --compact-output --raw-output '.data.changePercent24Hr')"
difference_yesterday="$(calc "$difference_yesterday")"

# Get last weeks difference
data_last_week="$(data "$url_last_week")"
data_last_week_first_character="$(echo "$data_last_week" | cut -c 1)"
if [ "$data_last_week_first_character" != "{" ]; then cat "$file"; exit; fi
price_last_week="$(echo "$data_last_week" | jq --compact-output --raw-output '.data[0].priceUsd')"
difference_last_week=$(calc "$price / $price_last_week * 100 - 100")

# Create output formatting
difference_yesterday_output="d $(output "$difference_yesterday")"
difference_last_week_output="w $(output "$difference_last_week")"

echo "\$$price  $difference_yesterday_output  $difference_last_week_output" > "$file"
echo "\$$price  $difference_yesterday_output  $difference_last_week_output"