{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE ScopedTypeVariables #-}

module Cardano.CLI.Compatible.StakePool.Option
  ( pCompatibleStakePoolCmds
  )
where

import Cardano.Api

import Cardano.CLI.Compatible.StakePool.Command
import Cardano.CLI.Environment (EnvCli (..))
import Cardano.CLI.EraBased.Common.Option
import Cardano.CLI.Parser

import Options.Applicative hiding (help, str)
import Options.Applicative qualified as Opt

pCompatibleStakePoolCmds
  :: ()
  => ShelleyBasedEra era
  -> EnvCli
  -> Maybe (Parser (CompatibleStakePoolCmds era))
pCompatibleStakePoolCmds :: forall era.
ShelleyBasedEra era
-> EnvCli -> Maybe (Parser (CompatibleStakePoolCmds era))
pCompatibleStakePoolCmds ShelleyBasedEra era
era EnvCli
envCli =
  String
-> InfoMod (CompatibleStakePoolCmds era)
-> [Maybe (Parser (CompatibleStakePoolCmds era))]
-> Maybe (Parser (CompatibleStakePoolCmds era))
forall a.
String -> InfoMod a -> [Maybe (Parser a)] -> Maybe (Parser a)
subInfoParser
    String
"stake-pool"
    ( String -> InfoMod (CompatibleStakePoolCmds era)
forall a. String -> InfoMod a
Opt.progDesc (String -> InfoMod (CompatibleStakePoolCmds era))
-> String -> InfoMod (CompatibleStakePoolCmds era)
forall a b. (a -> b) -> a -> b
$
        [String] -> String
forall a. Monoid a => [a] -> a
mconcat
          [ String
"Stake pool commands."
          ]
    )
    [ ShelleyBasedEra era
-> EnvCli -> Maybe (Parser (CompatibleStakePoolCmds era))
forall era.
ShelleyBasedEra era
-> EnvCli -> Maybe (Parser (CompatibleStakePoolCmds era))
pCompatibleStakePoolRegistrationCertificateCmd ShelleyBasedEra era
era EnvCli
envCli
    ]

pCompatibleStakePoolRegistrationCertificateCmd
  :: ()
  => ShelleyBasedEra era
  -> EnvCli
  -> Maybe (Parser (CompatibleStakePoolCmds era))
pCompatibleStakePoolRegistrationCertificateCmd :: forall era.
ShelleyBasedEra era
-> EnvCli -> Maybe (Parser (CompatibleStakePoolCmds era))
pCompatibleStakePoolRegistrationCertificateCmd ShelleyBasedEra era
era EnvCli
envCli = do
  w <- ShelleyBasedEra era -> Maybe (ShelleyBasedEra era)
forall (eon :: * -> *) era.
Eon eon =>
ShelleyBasedEra era -> Maybe (eon era)
forShelleyBasedEraMaybeEon ShelleyBasedEra era
era
  pure
    $ Opt.hsubparser
    $ commandWithMetavar "registration-certificate"
    $ Opt.info
      ( fmap CompatibleStakePoolRegistrationCertificateCmd $
          CompatibleStakePoolRegistrationCertificateCmdArgs w
            <$> pStakePoolVerificationKeyOrFile Nothing
            <*> pVrfVerificationKeyOrFile
            <*> pPoolPledge
            <*> pPoolCost
            <*> pPoolMargin
            <*> pRewardAcctVerificationKeyOrFile
            <*> some pPoolOwnerVerificationKeyOrFile
            <*> many pPoolRelay
            <*> optional
              ( pPotentiallyCheckedAnchorData
                  pMustCheckStakeMetadataHash
                  pStakePoolMetadataReference
              )
            <*> pNetworkId envCli
            <*> pOutputFile
      )
    $ Opt.progDesc "Create a stake pool registration certificate"