module Drasil.PDController.Choices where

import Language.Drasil.Code (AuxFile(..), Choices(..), CodeSpec, Comments(..), 
  ConstantRepr(..), ConstantStructure(..), ConstraintBehaviour(..), 
  ImplementationType(..), 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 = [Python, CSharp, Java, Cpp],
  architecture = makeArchit Modular Program,
  dataInfo = makeData Unbundled (Store Bundled) Const,
  optFeats = makeOptFeats
    (makeDocConfig [CommentFunc, CommentClass, CommentMod] Verbose Hide)
    (makeLogConfig [] "log.txt")
    [SampleInput "../../datafiles/pdcontroller/sampleInput.txt", ReadME],
  srsConstraints = makeConstraints Exception Exception,
  extLibs = [Math (makeODE [pidODEInfo] [scipyODEPckg, osloPckg, apacheODEPckg, odeintPckg])]
}