module Drasil.PDController.Choices where

import Language.Drasil.Code (AuxFile(..), Choices(..), CodeSpec, Comments(..), 
  ConstantRepr(..), ConstantStructure(..), ConstraintBehaviour(..), 
  ImplementationType(..), InputModule(..), Lang(..), Modularity(..), Structure(..), 
  Verbosity(..), Visibility(..), codeSpec, defaultChoices, makeArchit, makeData, 
  makeConstraints, makeODE, makeDocConfig, makeLogConfig, makeOptFeats, ExtLib(..))

import Data.Drasil.ExternalLibraries.ODELibraries (scipyODEPckg, osloPckg,
  apacheODEPckg, odeintPckg)
import Drasil.PDController.Body (pidODEInfo, fullSI)

codeSpecs :: CodeSpec
codeSpecs :: CodeSpec
codeSpecs = SystemInformation -> Choices -> [Mod] -> CodeSpec
codeSpec SystemInformation
fullSI Choices
codeChoices []

codeChoices :: Choices
codeChoices :: Choices
codeChoices = Choices
defaultChoices{
  lang :: [Lang]
lang = [Lang
Python, Lang
CSharp, Lang
Java, Lang
Cpp],
  architecture :: Architecture
architecture = Modularity -> ImplementationType -> Architecture
makeArchit (InputModule -> Modularity
Modular InputModule
Combined) ImplementationType
Program,
  dataInfo :: DataInfo
dataInfo = Structure -> ConstantStructure -> ConstantRepr -> DataInfo
makeData Structure
Unbundled (Structure -> ConstantStructure
Store Structure
Bundled) ConstantRepr
Const,
  optFeats :: OptionalFeatures
optFeats = DocConfig -> LogConfig -> [AuxFile] -> OptionalFeatures
makeOptFeats
    ([Comments] -> Verbosity -> Visibility -> DocConfig
makeDocConfig [Comments
CommentFunc, Comments
CommentClass, Comments
CommentMod] Verbosity
Verbose Visibility
Hide)
    ([Logging] -> FilePath -> LogConfig
makeLogConfig [] FilePath
"log.txt")
    [FilePath -> AuxFile
SampleInput FilePath
"../../datafiles/pdcontroller/sampleInput.txt", AuxFile
ReadME],
  srsConstraints :: Constraints
srsConstraints = ConstraintBehaviour -> ConstraintBehaviour -> Constraints
makeConstraints ConstraintBehaviour
Exception ConstraintBehaviour
Exception,
  extLibs :: [ExtLib]
extLibs = [ODE -> ExtLib
Math ([ODEInfo] -> [ODELibPckg] -> ODE
makeODE [ODEInfo
pidODEInfo] [ODELibPckg
scipyODEPckg, ODELibPckg
osloPckg, ODELibPckg
apacheODEPckg, ODELibPckg
odeintPckg])]
}