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

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

import Cardano.Api
import Cardano.Api.Experimental

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

newtype SpendScriptWitness era
  = SpendScriptWitness {forall era. SpendScriptWitness era -> ScriptWitness WitCtxTxIn era
sswScriptWitness :: ScriptWitness WitCtxTxIn era}
  deriving Int -> SpendScriptWitness era -> ShowS
[SpendScriptWitness era] -> ShowS
SpendScriptWitness era -> String
(Int -> SpendScriptWitness era -> ShowS)
-> (SpendScriptWitness era -> String)
-> ([SpendScriptWitness era] -> ShowS)
-> Show (SpendScriptWitness era)
forall era. Int -> SpendScriptWitness era -> ShowS
forall era. [SpendScriptWitness era] -> ShowS
forall era. SpendScriptWitness era -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall era. Int -> SpendScriptWitness era -> ShowS
showsPrec :: Int -> SpendScriptWitness era -> ShowS
$cshow :: forall era. SpendScriptWitness era -> String
show :: SpendScriptWitness era -> String
$cshowList :: forall era. [SpendScriptWitness era] -> ShowS
showList :: [SpendScriptWitness era] -> ShowS
Show

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
  -> AnyPlutusScriptVersion
  -> ScriptDatumOrFileSpending
  -> ScriptDataOrFile
  -> ExecutionUnits
  -> ScriptRequirements TxInItem
createPlutusReferenceScriptFromCliArgs :: TxIn
-> AnyPlutusScriptVersion
-> ScriptDatumOrFileSpending
-> ScriptDataOrFile
-> ExecutionUnits
-> ScriptRequirements 'TxInItem
createPlutusReferenceScriptFromCliArgs TxIn
txin AnyPlutusScriptVersion
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
-> AnyPlutusScriptVersion
-> OptionalDatum 'TxInItem
-> MintPolicyId 'TxInItem
-> ScriptDataOrFile
-> ExecutionUnits
-> PlutusRefScriptCliArgs 'TxInItem
forall (witnessable :: WitnessableItem).
TxIn
-> AnyPlutusScriptVersion
-> OptionalDatum witnessable
-> MintPolicyId witnessable
-> ScriptDataOrFile
-> ExecutionUnits
-> PlutusRefScriptCliArgs witnessable
PlutusRefScriptCliArgs TxIn
txin AnyPlutusScriptVersion
v ScriptDatumOrFileSpending
OptionalDatum 'TxInItem
mDatum NoPolicyId
MintPolicyId 'TxInItem
NoPolicyId ScriptDataOrFile
redeemer ExecutionUnits
execUnits