{-# LANGUAGE DataKinds #-}

module Cardano.CLI.EraBased.Script.Spend.Type
  ( createSimpleOrPlutusScriptFromCliArgs
  , createPlutusReferenceScriptFromCliArgs
  , createSimpleReferenceScriptFromCliArgs
  )
where

import Cardano.Api

import Cardano.CLI.EraBased.Script.Type
import Cardano.CLI.Type.Common (AnySLanguage, ScriptDataOrFile)

createSimpleOrPlutusScriptFromCliArgs
  :: File ScriptInAnyLang In
  -> Maybe (ScriptDatumOrFileSpending, ScriptDataOrFile, ExecutionUnits)
  -> AnySpendScript
createSimpleOrPlutusScriptFromCliArgs :: File ScriptInAnyLang 'In
-> Maybe
     (ScriptDatumOrFileSpending, ScriptDataOrFile, ExecutionUnits)
-> AnySpendScript
createSimpleOrPlutusScriptFromCliArgs File ScriptInAnyLang 'In
scriptFp (Just (ScriptDatumOrFileSpending
datumFile, ScriptDataOrFile
redeemerFile, ExecutionUnits
execUnits)) =
  PlutusSpendingScriptRequirements -> AnySpendScript
AnySpendScriptPlutus (PlutusSpendingScriptRequirements -> AnySpendScript)
-> PlutusSpendingScriptRequirements -> AnySpendScript
forall a b. (a -> b) -> a -> b
$ File ScriptInAnyLang 'In
-> ScriptDatumOrFileSpending
-> ScriptDataOrFile
-> ExecutionUnits
-> PlutusSpendingScriptRequirements
OnDiskPlutusSpendingScript File ScriptInAnyLang 'In
scriptFp ScriptDatumOrFileSpending
datumFile ScriptDataOrFile
redeemerFile ExecutionUnits
execUnits
createSimpleOrPlutusScriptFromCliArgs File ScriptInAnyLang 'In
scriptFp Maybe (ScriptDatumOrFileSpending, ScriptDataOrFile, ExecutionUnits)
Nothing =
  SimpleScriptRequirements -> AnySpendScript
AnySpendScriptSimple (SimpleScriptRequirements -> AnySpendScript)
-> SimpleScriptRequirements -> AnySpendScript
forall a b. (a -> b) -> a -> b
$ File ScriptInAnyLang 'In -> SimpleScriptRequirements
OnDiskSimpleScript File ScriptInAnyLang 'In
scriptFp

createSimpleReferenceScriptFromCliArgs :: TxIn -> AnySpendScript
createSimpleReferenceScriptFromCliArgs :: TxIn -> AnySpendScript
createSimpleReferenceScriptFromCliArgs TxIn
txin =
  SimpleScriptRequirements -> AnySpendScript
AnySpendScriptSimple (SimpleScriptRequirements -> AnySpendScript)
-> SimpleScriptRequirements -> AnySpendScript
forall a b. (a -> b) -> a -> b
$ TxIn -> SimpleScriptRequirements
ReferenceSimpleScript TxIn
txin

createPlutusReferenceScriptFromCliArgs
  :: TxIn
  -> AnySLanguage
  -> ScriptDatumOrFileSpending
  -> ScriptDataOrFile
  -> ExecutionUnits
  -> AnySpendScript
createPlutusReferenceScriptFromCliArgs :: TxIn
-> AnySLanguage
-> ScriptDatumOrFileSpending
-> ScriptDataOrFile
-> ExecutionUnits
-> AnySpendScript
createPlutusReferenceScriptFromCliArgs TxIn
txin AnySLanguage
v ScriptDatumOrFileSpending
mDatum ScriptDataOrFile
redeemer ExecutionUnits
execUnits =
  PlutusSpendingScriptRequirements -> AnySpendScript
AnySpendScriptPlutus (PlutusSpendingScriptRequirements -> AnySpendScript)
-> PlutusSpendingScriptRequirements -> AnySpendScript
forall a b. (a -> b) -> a -> b
$ TxIn
-> AnySLanguage
-> ScriptDatumOrFileSpending
-> ScriptDataOrFile
-> ExecutionUnits
-> PlutusSpendingScriptRequirements
ReferencePlutusSpendingScript TxIn
txin AnySLanguage
v ScriptDatumOrFileSpending
mDatum ScriptDataOrFile
redeemer ExecutionUnits
execUnits