module Stackctl.Commands
  ( module Stackctl.Commands
  ) where

import Stackctl.Prelude

import Stackctl.AutoSSO
import Stackctl.ColorOption
import Stackctl.DirectoryOption
import Stackctl.FilterOption
import Stackctl.Spec.Capture
import Stackctl.Spec.Cat
import Stackctl.Spec.Changes
import Stackctl.Spec.Deploy
import Stackctl.Spec.List
import Stackctl.Subcommand
import Stackctl.VerboseOption
import Stackctl.Version

cat
  :: ( HasColorOption options
     , HasVerboseOption options
     , HasDirectoryOption options
     , HasFilterOption options
     , HasAutoSSOOption options
     )
  => Subcommand options CatOptions
cat :: forall options.
(HasColorOption options, HasVerboseOption options,
 HasDirectoryOption options, HasFilterOption options,
 HasAutoSSOOption options) =>
Subcommand options CatOptions
cat =
  Subcommand
    { name :: Text
name = Text
"cat"
    , description :: Text
description = Text
"Pretty-print specifications"
    , parse :: Parser CatOptions
parse = Parser CatOptions
parseCatOptions
    , run :: CatOptions -> options -> IO ()
run = forall options subOptions a.
(HasColorOption options, HasVerboseOption options,
 HasAutoSSOOption options) =>
(subOptions -> AppT (App options) IO a)
-> subOptions -> options -> IO a
runAppSubcommand forall (m :: * -> *) env.
(MonadMask m, MonadResource m, MonadLogger m, MonadReader env m,
 HasLogger env, HasAwsScope env, HasConfig env,
 HasDirectoryOption env, HasFilterOption env) =>
CatOptions -> m ()
runCat
    }

capture
  :: ( HasColorOption options
     , HasVerboseOption options
     , HasDirectoryOption options
     , HasAutoSSOOption options
     )
  => Subcommand options CaptureOptions
capture :: forall options.
(HasColorOption options, HasVerboseOption options,
 HasDirectoryOption options, HasAutoSSOOption options) =>
Subcommand options CaptureOptions
capture =
  Subcommand
    { name :: Text
name = Text
"capture"
    , description :: Text
description = Text
"Capture deployed Stacks as specifications"
    , parse :: Parser CaptureOptions
parse = Parser CaptureOptions
parseCaptureOptions
    , run :: CaptureOptions -> options -> IO ()
run = forall options subOptions a.
(HasColorOption options, HasVerboseOption options,
 HasAutoSSOOption options) =>
(subOptions -> AppT (App options) IO a)
-> subOptions -> options -> IO a
runAppSubcommand forall (m :: * -> *) env.
(MonadMask m, MonadUnliftIO m, MonadResource m, MonadLogger m,
 MonadReader env m, HasAwsScope env, HasAwsEnv env, HasConfig env,
 HasDirectoryOption env) =>
CaptureOptions -> m ()
runCapture
    }

changes
  :: ( HasColorOption options
     , HasVerboseOption options
     , HasDirectoryOption options
     , HasFilterOption options
     , HasAutoSSOOption options
     )
  => Subcommand options ChangesOptions
changes :: forall options.
(HasColorOption options, HasVerboseOption options,
 HasDirectoryOption options, HasFilterOption options,
 HasAutoSSOOption options) =>
Subcommand options ChangesOptions
changes =
  Subcommand
    { name :: Text
name = Text
"changes"
    , description :: Text
description = Text
"Review changes between specification and deployed state"
    , parse :: Parser ChangesOptions
parse = Parser ChangesOptions
parseChangesOptions
    , run :: ChangesOptions -> options -> IO ()
run = forall options subOptions a.
(HasColorOption options, HasVerboseOption options,
 HasAutoSSOOption options) =>
(subOptions -> AppT (App options) IO a)
-> subOptions -> options -> IO a
runAppSubcommand forall (m :: * -> *) env.
(MonadMask m, MonadUnliftIO m, MonadResource m, MonadLogger m,
 MonadReader env m, HasLogger env, HasAwsScope env, HasAwsEnv env,
 HasConfig env, HasDirectoryOption env, HasFilterOption env) =>
ChangesOptions -> m ()
runChanges
    }

deploy
  :: ( HasColorOption options
     , HasVerboseOption options
     , HasDirectoryOption options
     , HasFilterOption options
     , HasAutoSSOOption options
     )
  => Subcommand options DeployOptions
deploy :: forall options.
(HasColorOption options, HasVerboseOption options,
 HasDirectoryOption options, HasFilterOption options,
 HasAutoSSOOption options) =>
Subcommand options DeployOptions
deploy =
  Subcommand
    { name :: Text
name = Text
"deploy"
    , description :: Text
description = Text
"Deploy specifications"
    , parse :: Parser DeployOptions
parse = Parser DeployOptions
parseDeployOptions
    , run :: DeployOptions -> options -> IO ()
run = forall options subOptions a.
(HasColorOption options, HasVerboseOption options,
 HasAutoSSOOption options) =>
(subOptions -> AppT (App options) IO a)
-> subOptions -> options -> IO a
runAppSubcommand forall (m :: * -> *) env.
(MonadMask m, MonadUnliftIO m, MonadResource m, MonadLogger m,
 MonadReader env m, HasLogger env, HasAwsScope env, HasAwsEnv env,
 HasConfig env, HasDirectoryOption env, HasFilterOption env) =>
DeployOptions -> m ()
runDeploy
    }

list
  :: ( HasColorOption options
     , HasVerboseOption options
     , HasDirectoryOption options
     , HasFilterOption options
     , HasAutoSSOOption options
     )
  => Subcommand options ListOptions
list :: forall options.
(HasColorOption options, HasVerboseOption options,
 HasDirectoryOption options, HasFilterOption options,
 HasAutoSSOOption options) =>
Subcommand options ListOptions
list =
  Subcommand
    { name :: Text
name = Text
"ls"
    , description :: Text
description = Text
"List specifications"
    , parse :: Parser ListOptions
parse = Parser ListOptions
parseListOptions
    , run :: ListOptions -> options -> IO ()
run = forall options subOptions a.
(HasColorOption options, HasVerboseOption options,
 HasAutoSSOOption options) =>
(subOptions -> AppT (App options) IO a)
-> subOptions -> options -> IO a
runAppSubcommand forall (m :: * -> *) env.
(MonadUnliftIO m, MonadMask m, MonadResource m, MonadLogger m,
 MonadReader env m, HasAwsScope env, HasAwsEnv env, HasLogger env,
 HasConfig env, HasDirectoryOption env, HasFilterOption env) =>
ListOptions -> m ()
runList
    }

version :: Subcommand options ()
version :: forall options. Subcommand options ()
version =
  Subcommand
    { name :: Text
name = Text
"version"
    , description :: Text
description = Text
"Output the version"
    , parse :: Parser ()
parse = forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
    , run :: () -> options -> IO ()
run = \() options
_ -> forall (m :: * -> *). MonadIO m => m ()
logVersion
    }