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

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

import Cardano.Api
import Cardano.Api.Experimental

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

createSimpleOrPlutusScriptFromCliArgs
  :: File ScriptInAnyLang In
  -> Maybe (ScriptDatumOrFileSpending, ScriptDataOrFile, ExecutionUnits)
  -> ScriptRequirements TxInItem
createSimpleOrPlutusScriptFromCliArgs :: File ScriptInAnyLang 'In
-> Maybe
     (ScriptDatumOrFileSpending, ScriptDataOrFile, ExecutionUnits)
-> ScriptRequirements 'TxInItem
createSimpleOrPlutusScriptFromCliArgs File ScriptInAnyLang 'In
scriptFp (Just (ScriptDatumOrFileSpending
datumFile, ScriptDataOrFile
redeemerFile, ExecutionUnits
execUnits)) =
  OnDiskPlutusScriptCliArgs 'TxInItem -> ScriptRequirements 'TxInItem
forall (witnessable :: WitnessableItem).
OnDiskPlutusScriptCliArgs witnessable
-> ScriptRequirements witnessable
OnDiskPlutusScript (OnDiskPlutusScriptCliArgs 'TxInItem
 -> ScriptRequirements 'TxInItem)
-> OnDiskPlutusScriptCliArgs 'TxInItem
-> ScriptRequirements 'TxInItem
forall a b. (a -> b) -> a -> b
$ File ScriptInAnyLang 'In
-> OptionalDatum 'TxInItem
-> ScriptDataOrFile
-> ExecutionUnits
-> OnDiskPlutusScriptCliArgs 'TxInItem
forall (witnessable :: WitnessableItem).
File ScriptInAnyLang 'In
-> OptionalDatum witnessable
-> ScriptDataOrFile
-> ExecutionUnits
-> OnDiskPlutusScriptCliArgs witnessable
OnDiskPlutusScriptCliArgs File ScriptInAnyLang 'In
scriptFp ScriptDatumOrFileSpending
OptionalDatum 'TxInItem
datumFile ScriptDataOrFile
redeemerFile ExecutionUnits
execUnits
createSimpleOrPlutusScriptFromCliArgs File ScriptInAnyLang 'In
scriptFp Maybe (ScriptDatumOrFileSpending, ScriptDataOrFile, ExecutionUnits)
Nothing = File ScriptInAnyLang 'In -> ScriptRequirements 'TxInItem
forall (witnessable :: WitnessableItem).
File ScriptInAnyLang 'In -> ScriptRequirements witnessable
OnDiskSimpleScript File ScriptInAnyLang 'In
scriptFp

createSimpleReferenceScriptFromCliArgs :: TxIn -> ScriptRequirements TxInItem
createSimpleReferenceScriptFromCliArgs :: TxIn -> ScriptRequirements 'TxInItem
createSimpleReferenceScriptFromCliArgs = SimpleRefScriptCliArgs 'TxInItem -> ScriptRequirements 'TxInItem
forall (witnessable :: WitnessableItem).
SimpleRefScriptCliArgs witnessable
-> ScriptRequirements witnessable
SimpleReferenceScript (SimpleRefScriptCliArgs 'TxInItem -> ScriptRequirements 'TxInItem)
-> (TxIn -> SimpleRefScriptCliArgs 'TxInItem)
-> TxIn
-> ScriptRequirements 'TxInItem
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (TxIn -> NoPolicyId -> SimpleRefScriptCliArgs 'TxInItem)
-> NoPolicyId -> TxIn -> SimpleRefScriptCliArgs 'TxInItem
forall a b c. (a -> b -> c) -> b -> a -> c
flip TxIn -> NoPolicyId -> SimpleRefScriptCliArgs 'TxInItem
TxIn -> MintPolicyId 'TxInItem -> SimpleRefScriptCliArgs 'TxInItem
forall (witnessable :: WitnessableItem).
TxIn
-> MintPolicyId witnessable -> SimpleRefScriptCliArgs witnessable
SimpleRefScriptArgs NoPolicyId
NoPolicyId

createPlutusReferenceScriptFromCliArgs
  :: TxIn
  -> AnySLanguage
  -> ScriptDatumOrFileSpending
  -> ScriptDataOrFile
  -> ExecutionUnits
  -> ScriptRequirements TxInItem
createPlutusReferenceScriptFromCliArgs :: TxIn
-> AnySLanguage
-> ScriptDatumOrFileSpending
-> ScriptDataOrFile
-> ExecutionUnits
-> ScriptRequirements 'TxInItem
createPlutusReferenceScriptFromCliArgs TxIn
txin AnySLanguage
v ScriptDatumOrFileSpending
mDatum ScriptDataOrFile
redeemer ExecutionUnits
execUnits =
  PlutusRefScriptCliArgs 'TxInItem -> ScriptRequirements 'TxInItem
forall (witnessable :: WitnessableItem).
PlutusRefScriptCliArgs witnessable
-> ScriptRequirements witnessable
PlutusReferenceScript (PlutusRefScriptCliArgs 'TxInItem -> ScriptRequirements 'TxInItem)
-> PlutusRefScriptCliArgs 'TxInItem -> ScriptRequirements 'TxInItem
forall a b. (a -> b) -> a -> b
$ TxIn
-> AnySLanguage
-> OptionalDatum 'TxInItem
-> MintPolicyId 'TxInItem
-> ScriptDataOrFile
-> ExecutionUnits
-> PlutusRefScriptCliArgs 'TxInItem
forall (witnessable :: WitnessableItem).
TxIn
-> AnySLanguage
-> OptionalDatum witnessable
-> MintPolicyId witnessable
-> ScriptDataOrFile
-> ExecutionUnits
-> PlutusRefScriptCliArgs witnessable
PlutusRefScriptCliArgs TxIn
txin AnySLanguage
v ScriptDatumOrFileSpending
OptionalDatum 'TxInItem
mDatum NoPolicyId
MintPolicyId 'TxInItem
NoPolicyId ScriptDataOrFile
redeemer ExecutionUnits
execUnits