module Network.MtGoxAPI.DepthStore.Adapter
    ( updateDepthStoreFromMessage
    , updateDepthStoreFromFullDepth
    , skipFullDepthRequest
    ) where

import Network.MtGoxAPI.Types
import Network.MtGoxAPI.DepthStore

updateDepthStoreFromMessage :: DepthStoreHandle -> StreamMessage -> IO ()
updateDepthStoreFromMessage handle (du@DepthUpdateUSD {}) = do
    let t = case duType du of
                Ask -> DepthStoreAsk
                Bid -> DepthStoreBid
    updateDepthStore handle t (duVolume du) (duPrice du)
updateDepthStoreFromMessage _ _ = return ()

updateDepthStoreFromFullDepth :: DepthStoreHandle -> FullDepth -> IO ()
updateDepthStoreFromFullDepth handle depth = do
    mapM_ (updateCmd DepthStoreAsk) (fdAsks depth)
    mapM_ (updateCmd DepthStoreBid) (fdBids depth)
    setHasFullDepth handle
  where
    updateCmd t (DepthEntry { deAmount = amount, dePrice = price }) =
        updateDepthStore handle t amount price

skipFullDepthRequest :: DepthStoreHandle -> IO ()
skipFullDepthRequest = setHasFullDepth