module Hix.Managed.Bump.App where

import Hix.Data.Error (Error (Client))
import Hix.Data.Monad (M)
import qualified Hix.Data.Options
import Hix.Data.Options (BumpOptions (BumpOptions))
import Hix.Json (jsonConfigE)
import Hix.Managed.Bump.Optimize (bumpOptimizeMain)
import qualified Hix.Managed.Data.ProjectContextProto
import Hix.Managed.Handlers.Build.Test (chooseHandlers)
import Hix.Managed.ProjectContext (withProjectContext)

bumpCli :: BumpOptions -> M ()
bumpCli :: BumpOptions -> M ()
bumpCli BumpOptions {common :: BumpOptions -> ManagedOptions
common = ManagedOptions
opts} = do
  ProjectContextProto
context <- (Text -> Error)
-> Either ProjectContextProto JsonConfig -> M ProjectContextProto
forall a.
FromJSON a =>
(Text -> Error) -> Either a JsonConfig -> M a
jsonConfigE Text -> Error
Client ManagedOptions
opts.context
  BuildHandlers
handlers <- IO BuildHandlers -> M BuildHandlers
forall a. IO a -> M a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO BuildHandlers -> M BuildHandlers)
-> IO BuildHandlers -> M BuildHandlers
forall a b. (a -> b) -> a -> b
$
    StateFileConfig
-> Envs EnvConfig
-> Maybe BuildOutputsPrefix
-> BuildConfig
-> CabalConfig
-> Maybe SpecialBuildHandlers
-> IO BuildHandlers
forall (m :: * -> *).
MonadIO m =>
StateFileConfig
-> Envs EnvConfig
-> Maybe BuildOutputsPrefix
-> BuildConfig
-> CabalConfig
-> Maybe SpecialBuildHandlers
-> m BuildHandlers
chooseHandlers ManagedOptions
opts.stateFile ProjectContextProto
context.envs ProjectContextProto
context.buildOutputsPrefix ManagedOptions
opts.project.build ManagedOptions
opts.cabal ManagedOptions
opts.handlers
  BuildHandlers
-> ProjectOptions
-> ProjectContextProto
-> (ProjectContext -> M ProjectResult)
-> M ()
withProjectContext BuildHandlers
handlers ManagedOptions
opts.project ProjectContextProto
context (BuildHandlers -> ProjectContext -> M ProjectResult
bumpOptimizeMain BuildHandlers
handlers)