require "readability"
require "down"

module Admin
  module Commands
    module Bookmarks
      class Cache
        include Dry::Monads[:result]
        include Deps["repos.bookmark_repo"]

        def call(bookmark_id: )
          bookmark = bookmark_repo.fetch(id: bookmark_id)
          bookmark.url

          tempfile = Down.download(bookmark.url)
          content = Readability::Document.new(tempfile.read, tags: %w[div section header p h1 h2 h3 h4 h5 h6 ol ul li table td tr thead tbody a code pre], attributes: %w[href]).content

          bookmark_repo.update(id: bookmark_id, cached_content: content)

          Success()
        end
      end
    end
  end
end
