/*
A widget that displays your current Twitter posting streak, powered by your ilo.so dashboard.

(Only works for ilo.so users!)

You will need to put in your Twitter username and API key in the widget's Parameter field. 

Like this: "username:myapikey"

You can get your API key from https://ilo.so/settings/

Sign up to ilo at https://ilo.so.

Version 1.0.0 (January 20, 2022)
by Dan Rowden (@dr)
*/


// Some colours you can change

const chartColor = "#c88e69"
const chartOpacity = 0.3
const widgetBgColor = "#fff7f2"
const secondaryColor = '#6d6d6d'
const primaryColor = '#1e272e'
const highlightColor = '#b77a54'
const warningColor = '#C51D17'


// Fonts

const smallText = new Font("HelveticaNeue", 14);
const largeText = new Font("HelveticaNeue-Medium", 16);



// =====================================================================
// Here starts all the widget code. Feel free to edit below if you want!
// Share your widget on Twitter! I'm @dr :)
// =====================================================================

let twitterParameter = args.widgetParameter.split(':')
let twitterUsername = twitterParameter[0]
let apiKey = twitterParameter[1]

let url = "https://api.ilo.so/v1/streak/"+twitterUsername+"/?api_key="+apiKey
let req = new Request(url)
const json = await req.loadJSON()
const yesterday_streak = parseInt(json['yesterday_streak'])
const tweets_today = parseInt(json['tweets_today'])
const current_streak = parseInt(json['current_streak'])
const longest_streak = parseInt(json['longest_streak'])
const streak = tweets_today == 0 ? yesterday_streak : current_streak


// Create the widget
let w = new ListWidget()
w.backgroundColor = new Color(widgetBgColor);
w.url = 'https://ilo.so/'+twitterUsername+'/'

var refreshDate = Date.now() + 1000*60*5 // Refresh after at least 5 minutes
w.refreshAfterDate = new Date(refreshDate)


// ilo icon
let icon = await loadImage('https://ilo.so/static/favicon.png')
let iconImg = w.addImage(icon)
iconImg.imageSize = new Size(20,20)

w.addSpacer(16)


// Show username
const usernameStr = '@' + twitterUsername
textUsername = w.addText(usernameStr)
textUsername.textColor = new Color(secondaryColor);
textUsername.font = smallText;

w.addSpacer(4)


// Show current follower count
const currentStr = streak + " day streak"
textStreak = w.addText(currentStr)
textStreak.textColor = new Color(primaryColor);
textStreak.font = largeText

w.addSpacer(4)


// Show today's tweet count
let tweetsTodayStr = (tweets_today > 0 ? '+' : '') + tweets_today + " tweet" + ((tweets_today == 1) ? "" : "s") + " today"
let tweetColor = highlightColor
if (tweets_today == 0) {
  tweetColor = warningColor
}
textTweets = w.addText(tweetsTodayStr)
textTweets.textColor = new Color(tweetColor);
textTweets.font = smallText;

w.addSpacer(4)


// Show today's tweet count
const longestStreakStr = "Longest: " + longest_streak + " days"
textLongest = w.addText(longestStreakStr)
textLongest.textColor = new Color(secondaryColor);
textLongest.font = smallText;


// Download an image from a given url
async function loadImage(imgUrl) {
  const req = new Request(imgUrl)
  return await req.loadImage()
}


if (config.runsInWidget) {
  Script.setWidget(w)
} else {
  await w.presentSmall()
}

if (config.runsWithSiri) {
  Speech.speak('Your current streak is '+streak+' days.')
}


Script.complete()