(ns tau.api.playlists
  (:require
   [clojure.java.data :as j]
   [ring.util.codec :refer [url-decode]]
   [tau.api.items :as items])
  (:import
   org.schabi.newpipe.extractor.playlist.PlaylistInfo
   org.schabi.newpipe.extractor.Page
   org.schabi.newpipe.extractor.NewPipe))

(defn get-playlist
  ([url]
   (let [service (NewPipe/getServiceByUrl (url-decode url))
         info (PlaylistInfo/getInfo service (url-decode url))]
     {:id (.getId info)
      :name (.getName info)
      :playlist-type (j/from-java (.getPlaylistType info))
      :thumbnail-url (.getThumbnailUrl info)
      :banner-url (.getBannerUrl info)
      :uploader-name (.getUploaderName info)
      :uploader-url (.getUploaderUrl info)
      :uploader-avatar (.getUploaderAvatarUrl info)
      :stream-count (.getStreamCount info)
      :next-page (j/from-java (.getNextPage info))
      :related-streams (items/get-items (.getRelatedItems info))
      :service-id (.getServiceId info)}))
  ([url page-url]
   (let [service (NewPipe/getServiceByUrl (url-decode url))
         info (PlaylistInfo/getMoreItems service url (Page. (url-decode page-url)))]
     {:next-page (j/from-java (.getNextPage info))
      :related-streams (items/get-items (.getItems info))})))
