# frozen_string_literal: true

module Calliope
  class Track
    # @return [String]
    attr_reader :isrc

    # @return [String]
    attr_reader :name

    # @return [String]
    attr_reader :cover

    # @return [String]
    attr_reader :artist

    # @return [String]
    attr_reader :source
    alias url source

    # @return [String]
    attr_reader :encoded

    # @return [Time]
    attr_reader :duration

    # @return [Integer]
    attr_reader :position

    # @return [String]
    attr_reader :is_stream

    # @return [String]
    attr_reader :identifier

    # @return [String]
    attr_reader :source_name

    # @!visibility private
    # @param payload [Hash]
    def initialize(payload)
      @isrc = payload["info"]["isrc"]
      @name = payload["info"]["title"]
      @cover = payload["info"]["artworkUrl"]
      @artist = payload["info"]["author"]
      @source = payload["info"]["uri"]
      @encoded = payload["encoded"]
      @duration = payload["info"]["length"]
      @position = payload["info"]["position"]
      @is_stream = payload["info"]["isStream"]
      @identifier = payload["info"]["identifier"]
      @source_name = payload["info"]["sourceName"]
    end

    # Converts this track into a hash that can used for playback.
    def to_h
      { encoded: @encoded }
    end

    # A string representation of the track time.
    def strftime
      Time.at(@duration / 1000.0).utc.strftime("%M:%S")
    end

    # A null track object that stops the current track from playing.
    def self.null
      { encoded: nil }
    end
  end
end