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

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

import Cardano.Api
  ( ExecutionUnits
  , File
  , FileDirection (In)
  , ScriptInAnyLang
  , TxIn
  )
import Cardano.Api.Experimental qualified as Exp

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

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

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