module Drasil.SSP.Goals (goals, identifyCritAndFSGS, determineNormalFGS,
  determineShearFGS) where

import Language.Drasil
import Language.Drasil.Chunk.Concept.NamedCombinators
import qualified Language.Drasil.Sentence.Combinators as S

import Data.Drasil.Concepts.Documentation (goalStmtDom)

import Drasil.SSP.Defs (crtSlpSrf, fsConcept, slice, slope)
import Drasil.SSP.Unitals (intNormForce, intShrForce)

-----------
-- Goals --
-----------

goals :: [ConceptInstance]
goals :: [ConceptInstance]
goals = [ConceptInstance
identifyCritAndFSGS, ConceptInstance
determineNormalFGS, ConceptInstance
determineShearFGS]

identifyCritAndFSGS :: ConceptInstance
identifyCritAndFSGS :: ConceptInstance
identifyCritAndFSGS = forall c.
Concept c =>
String -> Sentence -> String -> c -> ConceptInstance
cic String
"identifyCritAndFS" Sentence
identifyCritAndFS 
  String
"Identify-Crit-and-FS" ConceptChunk
goalStmtDom

determineNormalFGS :: ConceptInstance
determineNormalFGS :: ConceptInstance
determineNormalFGS = forall c.
Concept c =>
String -> Sentence -> String -> c -> ConceptInstance
cic String
"determineNormalF" (forall a. NamedIdea a => a -> Sentence
determineF UnitalChunk
intNormForce) 
  String
"Determine-Normal-Forces" ConceptChunk
goalStmtDom

determineShearFGS :: ConceptInstance
determineShearFGS :: ConceptInstance
determineShearFGS = forall c.
Concept c =>
String -> Sentence -> String -> c -> ConceptInstance
cic String
"determineShearF" (forall a. NamedIdea a => a -> Sentence
determineF UnitalChunk
intShrForce) 
  String
"Determine-Shear-Forces" ConceptChunk
goalStmtDom

identifyCritAndFS :: Sentence
identifyCritAndFS :: Sentence
identifyCritAndFS = String -> Sentence
S String
"Identify the" Sentence -> Sentence -> Sentence
+:+ forall a. NamedIdea a => a -> Sentence
phrase ConceptChunk
crtSlpSrf Sentence -> Sentence -> Sentence
`S.andThe` 
  String -> Sentence
S String
"corresponding" Sentence -> Sentence -> Sentence
+:+. forall a. NamedIdea a => a -> Sentence
phrase ConceptChunk
fsConcept
  
determineF :: (NamedIdea a) => a -> Sentence
determineF :: forall a. NamedIdea a => a -> Sentence
determineF a
what = String -> Sentence
S String
"Determine the" Sentence -> Sentence -> Sentence
+:+ forall a. NamedIdea a => a -> Sentence
phrase a
what Sentence -> Sentence -> Sentence
+:+
  String -> Sentence
S String
"between each pair of vertical" Sentence -> Sentence -> Sentence
+:+. forall n. NounPhrase n => n -> Sentence
pluralNP (IdeaDict
slice forall c d. (NamedIdea c, NamedIdea d) => c -> d -> NP
`ofThePS`
  IdeaDict
slope)