module Drasil.SglPend.Requirements where

import Language.Drasil
import qualified Language.Drasil.Sentence.Combinators as S
import Data.Drasil.Concepts.Documentation (funcReqDom, output_, value)
import Drasil.SglPend.IMods (angularDisplacementIM)
import Drasil.SglPend.Unitals (lenRod, pendDisplacementAngle)
import Data.Drasil.Quantities.Physics (angularDisplacement)
import Drasil.DblPend.Requirements(verifyInptValsDesc)

--Functional Requirements--
funcReqs :: [ConceptInstance]
funcReqs :: [ConceptInstance]
funcReqs = [ConceptInstance
verifyInptVals, ConceptInstance
calcAngPos, ConceptInstance
outputValues]

verifyInptVals, calcAngPos, outputValues :: ConceptInstance

verifyInptVals :: ConceptInstance
verifyInptVals = forall c.
Concept c =>
String -> Sentence -> String -> c -> ConceptInstance
cic String
"verifyInptVals" Sentence
verifyInptValsDesc String
"Verify-Input-Values" ConceptChunk
funcReqDom
calcAngPos :: ConceptInstance
calcAngPos  = forall c.
Concept c =>
String -> Sentence -> String -> c -> ConceptInstance
cic String
"calcAngPos"   Sentence
calcAngPosDesc   String
"Calculate-Angular-Position-Of-Mass" ConceptChunk
funcReqDom
outputValues :: ConceptInstance
outputValues = forall c.
Concept c =>
String -> Sentence -> String -> c -> ConceptInstance
cic String
"outputValues" Sentence
outputValuesDesc String
"Output-Values" ConceptChunk
funcReqDom

calcAngPosDesc, outputValuesDesc :: Sentence
calcAngPosDesc :: Sentence
calcAngPosDesc = [Sentence] -> Sentence
foldlSent [String -> Sentence
S String
"Calculate the following" Sentence -> Sentence -> Sentence
+: forall n. NamedIdea n => n -> Sentence
plural IdeaDict
value,
    forall c. (HasUID c, HasSymbol c) => c -> Sentence
ch UnitalChunk
angularDisplacement Sentence -> Sentence -> Sentence
`S.and_` forall c. (HasUID c, HasSymbol c) => c -> Sentence
ch UnitalChunk
pendDisplacementAngle,
    Sentence -> Sentence
sParen (String -> Sentence
S String
"from" Sentence -> Sentence -> Sentence
+:+ forall r.
(HasUID r, HasRefAddress r, HasShortName r) =>
r -> Sentence
refS InstanceModel
angularDisplacementIM)]
outputValuesDesc :: Sentence
outputValuesDesc = [Sentence] -> Sentence
foldlSent [forall n. NamedIdea n => n -> Sentence
atStart IdeaDict
output_, forall c. (HasUID c, HasSymbol c) => c -> Sentence
ch UnitalChunk
lenRod, Sentence -> Sentence
sParen (String -> Sentence
S String
"from" Sentence -> Sentence -> Sentence
+:+ forall r.
(HasUID r, HasRefAddress r, HasShortName r) =>
r -> Sentence
refS InstanceModel
angularDisplacementIM)]