class ApiLink < MemoryRecord

  attr_accessor :talentspace
  attr_accessor :email
  attr_accessor :profile_url
  attr_accessor :job_url
  attr_accessor :language
  attr_accessor :utm_id
  attr_accessor :utm_source
  attr_accessor :utm_medium
  attr_accessor :utm_campaign
  attr_accessor :utm_term
  attr_accessor :utm_content
  attr_accessor :secret

  def timestamp = Time.now.iso8601

  def hmac = ApiLink.hmac(talentspace:, email:, timestamp:, secret: )

  def query_params =
    {}.merge(
      talentspace:,
      email:,
      timestamp:,
      hmac:,
      profile_url:,
      job_url:,
      language:,
      utm_id:,
      utm_source:,
      utm_medium:,
      utm_campaign:,
      utm_term:,
      utm_content:).compact_blank

  def link
    "https://development.api.talentguide.com/public/v1/link?#{query_params.to_query}"
  end

  def self.hmac(talentspace:, email:, timestamp:, secret:)
    hmac_body = [talentspace, email, timestamp, secret].join(';')
    OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('md5'), secret, hmac_body)
  end
end