{-# LANGUAGE DataKinds #-}

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

import Cardano.Api

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

-- We always need the policy id when constructing a transaction that mints.
-- In the case of reference scripts, the user currently must provide the policy id (script hash)
-- in order to correctly construct the transaction.
data MintScriptWitnessWithPolicyId era
  = MintScriptWitnessWithPolicyId
  { forall era. MintScriptWitnessWithPolicyId era -> PolicyId
mswPolId :: PolicyId
  , forall era.
MintScriptWitnessWithPolicyId era -> ScriptWitness WitCtxMint era
mswScriptWitness :: ScriptWitness WitCtxMint era
  }
  deriving Int -> MintScriptWitnessWithPolicyId era -> ShowS
[MintScriptWitnessWithPolicyId era] -> ShowS
MintScriptWitnessWithPolicyId era -> String
(Int -> MintScriptWitnessWithPolicyId era -> ShowS)
-> (MintScriptWitnessWithPolicyId era -> String)
-> ([MintScriptWitnessWithPolicyId era] -> ShowS)
-> Show (MintScriptWitnessWithPolicyId era)
forall era. Int -> MintScriptWitnessWithPolicyId era -> ShowS
forall era. [MintScriptWitnessWithPolicyId era] -> ShowS
forall era. MintScriptWitnessWithPolicyId era -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall era. Int -> MintScriptWitnessWithPolicyId era -> ShowS
showsPrec :: Int -> MintScriptWitnessWithPolicyId era -> ShowS
$cshow :: forall era. MintScriptWitnessWithPolicyId era -> String
show :: MintScriptWitnessWithPolicyId era -> String
$cshowList :: forall era. [MintScriptWitnessWithPolicyId era] -> ShowS
showList :: [MintScriptWitnessWithPolicyId era] -> ShowS
Show

createSimpleOrPlutusScriptFromCliArgs
  :: File ScriptInAnyLang In
  -> Maybe (ScriptDataOrFile, ExecutionUnits)
  -> AnyMintScript
createSimpleOrPlutusScriptFromCliArgs :: File ScriptInAnyLang 'In
-> Maybe (ScriptDataOrFile, ExecutionUnits) -> AnyMintScript
createSimpleOrPlutusScriptFromCliArgs File ScriptInAnyLang 'In
scriptFp Maybe (ScriptDataOrFile, ExecutionUnits)
Nothing =
  File ScriptInAnyLang 'In -> AnyMintScript
AnyMintScriptSimpleOnDisk File ScriptInAnyLang 'In
scriptFp
createSimpleOrPlutusScriptFromCliArgs File ScriptInAnyLang 'In
scriptFp (Just (ScriptDataOrFile
redeemerFile, ExecutionUnits
execUnits)) =
  PlutusMintingScriptRequirements -> AnyMintScript
AnyMintScriptPlutus (PlutusMintingScriptRequirements -> AnyMintScript)
-> PlutusMintingScriptRequirements -> AnyMintScript
forall a b. (a -> b) -> a -> b
$ File ScriptInAnyLang 'In
-> ScriptDataOrFile
-> ExecutionUnits
-> PlutusMintingScriptRequirements
OnDiskPlutusMintingScript File ScriptInAnyLang 'In
scriptFp ScriptDataOrFile
redeemerFile ExecutionUnits
execUnits

createSimpleReferenceScriptFromCliArgs
  :: TxIn
  -> PolicyId
  -> AnyMintScript
createSimpleReferenceScriptFromCliArgs :: TxIn -> PolicyId -> AnyMintScript
createSimpleReferenceScriptFromCliArgs TxIn
txin PolicyId
polId =
  TxIn -> PolicyId -> AnyMintScript
AnyMintScriptSimpleRef TxIn
txin PolicyId
polId

createPlutusReferenceScriptFromCliArgs
  :: TxIn
  -> AnySLanguage
  -> ScriptDataOrFile
  -> ExecutionUnits
  -> PolicyId
  -> AnyMintScript
createPlutusReferenceScriptFromCliArgs :: TxIn
-> AnySLanguage
-> ScriptDataOrFile
-> ExecutionUnits
-> PolicyId
-> AnyMintScript
createPlutusReferenceScriptFromCliArgs TxIn
txin AnySLanguage
scriptVersion ScriptDataOrFile
scriptData ExecutionUnits
execUnits PolicyId
polId =
  PlutusMintingScriptRequirements -> AnyMintScript
AnyMintScriptPlutus (PlutusMintingScriptRequirements -> AnyMintScript)
-> PlutusMintingScriptRequirements -> AnyMintScript
forall a b. (a -> b) -> a -> b
$
    TxIn
-> AnySLanguage
-> PolicyId
-> ScriptDataOrFile
-> ExecutionUnits
-> PlutusMintingScriptRequirements
ReferencePlutusMintingScript TxIn
txin AnySLanguage
scriptVersion PolicyId
polId ScriptDataOrFile
scriptData ExecutionUnits
execUnits