-- YAWL, Spotify widget module
local spotify = {}
local mt = {}

-- Requires
local wibox = require("wibox")
local base = require("yawl.base")
local utils = require("yawl.utils")
local beautiful = require("beautiful")
local watch = require("awful.widget.watch")

-- Entrypoint
function mt.__call()

  -- base
  local t = base.txt()
  local w = base.bg()
  w:set_widget(t)
  -- change default bg to paused
  w:set_bg(beautiful.yawl_spotify_absent)

  -- icon widget
  local i = base.icon("")

  -- merge of the two
  local widget = wibox.widget {
    i,
    w,
    layout = wibox.layout.fixed.horizontal,
  }

  -- watch func
  watch(
    -- is spotify running ?
    'pidof spotify', 5,
    function(_, stdout, stderr, exitreason, exitcode)

      if stdout == "" then
        w:set_bg(beautiful.yawl_spotify_absent)
        w:set_fg(beautiful.yawl_spotify_absent_fg)
        t:set_text(" not running ")
        return
      end

      w:set_fg(beautiful.yawl_fg)
      local status = utils.sanitize(utils.run("playerctl -p spotify status"))
      local np = utils.sanitize(utils.run('playerctl -p spotify metadata --format="{{ artist }} · {{ title }}"'))

      if status == "Playing" then
        w:set_bg(beautiful.yawl_spotify_play)
      else
        w:set_bg(beautiful.yawl_spotify_pause)
      end

      t:set_text(" " .. np .. " ")

    end,
    w
  )

  return widget

end

-- Return widget
return setmetatable(spotify, mt)