{-# LANGUAGE GADTs #-}
{-# LANGUAGE LambdaCase #-}

{-
This module is concerned with providing backwards compatible cli commands for our internal
testing needs. The intention is to restrict as much as possible which functionality we maintain backwards
compatibility for.
-}

module Cardano.CLI.Compatible.Command
  ( AnyCompatibleCommand (..)
  , CompatibleCommand (..)
  , renderAnyCompatibleCommand
  )
where

import Cardano.CLI.Compatible.Governance.Command
import Cardano.CLI.Compatible.StakeAddress.Command
import Cardano.CLI.Compatible.StakePool.Command
import Cardano.CLI.Compatible.Transaction.Command

import Data.Text

data AnyCompatibleCommand where
  AnyCompatibleCommand :: CompatibleCommand era -> AnyCompatibleCommand

renderAnyCompatibleCommand :: AnyCompatibleCommand -> Text
renderAnyCompatibleCommand :: AnyCompatibleCommand -> Text
renderAnyCompatibleCommand = \case
  AnyCompatibleCommand CompatibleCommand era
cmd -> CompatibleCommand era -> Text
forall era. CompatibleCommand era -> Text
renderCompatibleCommand CompatibleCommand era
cmd

data CompatibleCommand era
  = CompatibleTransactionCmds (CompatibleTransactionCmds era)
  | CompatibleGovernanceCmds (CompatibleGovernanceCmds era)
  | CompatibleStakeAddressCmds (CompatibleStakeAddressCmds era)
  | CompatibleStakePoolCmds (CompatibleStakePoolCmds era)

renderCompatibleCommand :: CompatibleCommand era -> Text
renderCompatibleCommand :: forall era. CompatibleCommand era -> Text
renderCompatibleCommand = \case
  CompatibleTransactionCmds CompatibleTransactionCmds era
cmd -> CompatibleTransactionCmds era -> Text
forall era. CompatibleTransactionCmds era -> Text
renderCompatibleTransactionCmd CompatibleTransactionCmds era
cmd
  CompatibleGovernanceCmds CompatibleGovernanceCmds era
cmd -> CompatibleGovernanceCmds era -> Text
forall era. CompatibleGovernanceCmds era -> Text
renderCompatibleGovernanceCmds CompatibleGovernanceCmds era
cmd
  CompatibleStakeAddressCmds CompatibleStakeAddressCmds era
cmd -> CompatibleStakeAddressCmds era -> Text
forall era. CompatibleStakeAddressCmds era -> Text
renderCompatibleStakeAddressCmds CompatibleStakeAddressCmds era
cmd
  CompatibleStakePoolCmds CompatibleStakePoolCmds era
cmd -> CompatibleStakePoolCmds era -> Text
forall era. CompatibleStakePoolCmds era -> Text
renderCompatibleStakePoolCmds CompatibleStakePoolCmds era
cmd