{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE NoFieldSelectors #-}

module Cardano.Rpc.Server.Internal.Env
  ( RpcEnv (..)
  , mkLocalNodeConnectInfo
  )
where

import Cardano.Api
import Cardano.Rpc.Server.Config

import Control.Tracer (Tracer)

data RpcEnv = RpcEnv
  { RpcEnv -> RpcConfig
config :: !RpcConfig
  , RpcEnv -> forall (m :: * -> *). MonadIO m => Tracer m String
tracer :: forall m. MonadIO m => Tracer m String
  , -- TODO replace with better connection management than one connection per rpc request
    RpcEnv -> LocalNodeConnectInfo
rpcLocalNodeConnectInfo :: !LocalNodeConnectInfo
  }

mkLocalNodeConnectInfo :: SocketPath -> NetworkMagic -> LocalNodeConnectInfo
mkLocalNodeConnectInfo :: SocketPath -> NetworkMagic -> LocalNodeConnectInfo
mkLocalNodeConnectInfo SocketPath
nodeSocketPath NetworkMagic
networkMagic =
  LocalNodeConnectInfo
    { localConsensusModeParams :: ConsensusModeParams
localConsensusModeParams = EpochSlots -> ConsensusModeParams
CardanoModeParams (Word64 -> EpochSlots
EpochSlots Word64
21600)
    , localNodeNetworkId :: NetworkId
localNodeNetworkId = NetworkMagic -> NetworkId
fromNetworkMagic NetworkMagic
networkMagic
    , localNodeSocketPath :: SocketPath
localNodeSocketPath = SocketPath
nodeSocketPath
    }