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

module Cardano.CLI.EraBased.Script.Proposal.Type
  ( PlutusRefScriptCliArgs (..)
  , ProposalScriptWitness (..)
  , createSimpleOrPlutusScriptFromCliArgs
  , createPlutusReferenceScriptFromCliArgs
  )
where

import Cardano.Api
import Cardano.Api.Experimental
import Cardano.Api.Experimental qualified as Exp

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

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

createSimpleOrPlutusScriptFromCliArgs
  :: File ScriptInAnyLang In
  -> Maybe (ScriptDataOrFile, ExecutionUnits)
  -> ScriptRequirements ProposalItem
createSimpleOrPlutusScriptFromCliArgs :: File ScriptInAnyLang 'In
-> Maybe (ScriptDataOrFile, ExecutionUnits)
-> ScriptRequirements 'ProposalItem
createSimpleOrPlutusScriptFromCliArgs File ScriptInAnyLang 'In
scriptFp (Just (ScriptDataOrFile
redeemer, ExecutionUnits
execUnits)) =
  OnDiskPlutusScriptCliArgs 'ProposalItem
-> ScriptRequirements 'ProposalItem
forall (witnessable :: WitnessableItem).
OnDiskPlutusScriptCliArgs witnessable
-> ScriptRequirements witnessable
OnDiskPlutusScript (OnDiskPlutusScriptCliArgs 'ProposalItem
 -> ScriptRequirements 'ProposalItem)
-> OnDiskPlutusScriptCliArgs 'ProposalItem
-> ScriptRequirements 'ProposalItem
forall a b. (a -> b) -> a -> b
$ File ScriptInAnyLang 'In
-> OptionalDatum 'ProposalItem
-> ScriptDataOrFile
-> ExecutionUnits
-> OnDiskPlutusScriptCliArgs 'ProposalItem
forall (witnessable :: WitnessableItem).
File ScriptInAnyLang 'In
-> OptionalDatum witnessable
-> ScriptDataOrFile
-> ExecutionUnits
-> OnDiskPlutusScriptCliArgs witnessable
OnDiskPlutusScriptCliArgs File ScriptInAnyLang 'In
scriptFp NoScriptDatum
OptionalDatum 'ProposalItem
Exp.NoScriptDatumAllowed ScriptDataOrFile
redeemer ExecutionUnits
execUnits
createSimpleOrPlutusScriptFromCliArgs File ScriptInAnyLang 'In
scriptFp Maybe (ScriptDataOrFile, ExecutionUnits)
Nothing =
  File ScriptInAnyLang 'In -> ScriptRequirements 'ProposalItem
forall (witnessable :: WitnessableItem).
File ScriptInAnyLang 'In -> ScriptRequirements witnessable
OnDiskSimpleScript File ScriptInAnyLang 'In
scriptFp

createPlutusReferenceScriptFromCliArgs
  :: TxIn
  -> AnyPlutusScriptVersion
  -> ScriptDataOrFile
  -> ExecutionUnits
  -> ScriptRequirements ProposalItem
createPlutusReferenceScriptFromCliArgs :: TxIn
-> AnyPlutusScriptVersion
-> ScriptDataOrFile
-> ExecutionUnits
-> ScriptRequirements 'ProposalItem
createPlutusReferenceScriptFromCliArgs TxIn
txIn AnyPlutusScriptVersion
version ScriptDataOrFile
redeemer ExecutionUnits
execUnits =
  PlutusRefScriptCliArgs 'ProposalItem
-> ScriptRequirements 'ProposalItem
forall (witnessable :: WitnessableItem).
PlutusRefScriptCliArgs witnessable
-> ScriptRequirements witnessable
PlutusReferenceScript (PlutusRefScriptCliArgs 'ProposalItem
 -> ScriptRequirements 'ProposalItem)
-> PlutusRefScriptCliArgs 'ProposalItem
-> ScriptRequirements 'ProposalItem
forall a b. (a -> b) -> a -> b
$
    TxIn
-> AnyPlutusScriptVersion
-> OptionalDatum 'ProposalItem
-> MintPolicyId 'ProposalItem
-> ScriptDataOrFile
-> ExecutionUnits
-> PlutusRefScriptCliArgs 'ProposalItem
forall (witnessable :: WitnessableItem).
TxIn
-> AnyPlutusScriptVersion
-> OptionalDatum witnessable
-> MintPolicyId witnessable
-> ScriptDataOrFile
-> ExecutionUnits
-> PlutusRefScriptCliArgs witnessable
PlutusRefScriptCliArgs TxIn
txIn AnyPlutusScriptVersion
version NoScriptDatum
OptionalDatum 'ProposalItem
Exp.NoScriptDatumAllowed NoPolicyId
MintPolicyId 'ProposalItem
NoPolicyId ScriptDataOrFile
redeemer ExecutionUnits
execUnits