{-# LANGUAGE GADTs #-}
{-# LANGUAGE TemplateHaskell #-}

module TDLib.Effect where

import Data.Aeson
import Data.ByteString
import Data.Int
import Data.Kind
import Polysemy
import TDLib.Types.Common

data TDLib (m :: Type -> Type) a where
  RunCmd :: (ToJSON cmd, FromJSON res) => cmd -> TDLib m res
  SetVerbosity :: Verbosity -> TDLib m ()
  SetFatalErrorCallback :: (ByteString -> IO ()) -> TDLib m ()
  SetLogPath :: ByteString -> TDLib m Bool
  SetLogMaxSize :: Int64 -> TDLib m ()

makeSem_ ''TDLib

-- | runs a command and waits fot its result
runCmd ::
  forall cmd res r.
  (ToJSON cmd, FromJSON res, Member TDLib r) =>
  -- | Command
  cmd ->
  Sem r res

setVerbosity :: forall r. Member TDLib r => Verbosity -> Sem r ()

setFatalErrorCallback :: forall r. Member TDLib r => (ByteString -> IO ()) -> Sem r ()

setLogPath :: forall r. Member TDLib r => ByteString -> Sem r Bool

setLogMaxSize :: forall r. Member TDLib r => Int64 -> Sem r ()