module Kafka.Consumer.Subscription
where

--
import Data.Map (Map)
import qualified Data.Map as M
import qualified Data.List as L
import Kafka.Types
import Kafka.Consumer.Types

data Subscription = Subscription [TopicName] (Map String String)

instance Monoid Subscription where
  mempty = Subscription [] M.empty
  mappend (Subscription ts1 m1) (Subscription ts2 m2) =
    let ts' = L.nub $ L.union ts1 ts2
        ps' = M.union m1 m2
     in Subscription ts' ps'

topics :: [TopicName] -> Subscription
topics ts = Subscription (L.nub ts) M.empty

offsetReset :: OffsetReset -> Subscription
offsetReset o =
  let o' = case o of
             Earliest -> "earliest"
             Latest   -> "latest"
   in Subscription [] (M.fromList [("auto.offset.reset", o')])

autoCommit :: Millis -> Subscription
autoCommit (Millis ms) = Subscription [] $
  M.fromList
    [ ("enable.auto.commit", "true")
    , ("auto.commit.interval.ms", show ms)
    ]

extraSubscriptionProps :: Map String String -> Subscription
extraSubscriptionProps = Subscription []