module Drasil.GlassBR.Assumptions (assumpGT, assumpGC, assumpES, assumpSV,
  assumpGL, assumpBC, assumpRT, assumpLDFC, assumptionConstants,
  assumptions) where

import Language.Drasil hiding (organization)
import qualified Drasil.DocLang.SRS as SRS (valsOfAuxCons)
import Language.Drasil.Chunk.Concept.NamedCombinators
import qualified Language.Drasil.NounPhrase.Combinators as NP
import qualified Language.Drasil.Sentence.Combinators as S

import Data.Drasil.Concepts.Documentation as Doc (assumpDom, condition,
  constant, practice, reference, scenario, system, value)
import Data.Drasil.Concepts.Math (calculation, surface, shape)
import Data.Drasil.Concepts.PhysicalProperties (materialProprty)

import Drasil.GlassBR.Concepts (beam, cantilever, edge, glaSlab, glass, glassBR, 
  lShareFac, plane, responseTy)
import Drasil.GlassBR.References (astm2009)
import Drasil.GlassBR.Unitals (constantK, constantLoadDur, 
  constantLoadSF, constantM, constantModElas, explosion, lateral, lDurFac,
  loadDur)

assumptions :: [ConceptInstance]
assumptions :: [ConceptInstance]
assumptions = [ConceptInstance
assumpGT, ConceptInstance
assumpGC, ConceptInstance
assumpES, ConceptInstance
assumpSV, ConceptInstance
assumpGL, ConceptInstance
assumpBC,
  ConceptInstance
assumpRT, ConceptInstance
assumpLDFC]

assumptionConstants :: [ConstQDef]
assumptionConstants :: [ConstQDef]
assumptionConstants = [ConstQDef
constantM, ConstQDef
constantK, ConstQDef
constantModElas,
  ConstQDef
constantLoadDur, ConstQDef
constantLoadSF]

assumpGT, assumpGC, assumpES, assumpSV, assumpGL, assumpBC, assumpRT, assumpLDFC :: ConceptInstance
assumpGT :: ConceptInstance
assumpGT           = String -> Sentence -> String -> ConceptChunk -> ConceptInstance
forall c.
Concept c =>
String -> Sentence -> String -> c -> ConceptInstance
cic String
"assumpGT"   Sentence
glassTypeDesc                     String
"glassType"           ConceptChunk
Doc.assumpDom
assumpGC :: ConceptInstance
assumpGC           = String -> Sentence -> String -> ConceptChunk -> ConceptInstance
forall c.
Concept c =>
String -> Sentence -> String -> c -> ConceptInstance
cic String
"assumpGC"   Sentence
glassConditionDesc                String
"glassCondition"      ConceptChunk
Doc.assumpDom
assumpES :: ConceptInstance
assumpES           = String -> Sentence -> String -> ConceptChunk -> ConceptInstance
forall c.
Concept c =>
String -> Sentence -> String -> c -> ConceptInstance
cic String
"assumpES"   Sentence
explainScenarioDesc               String
"explainScenario"     ConceptChunk
Doc.assumpDom
assumpSV :: ConceptInstance
assumpSV           = String -> Sentence -> String -> ConceptChunk -> ConceptInstance
forall c.
Concept c =>
String -> Sentence -> String -> c -> ConceptInstance
cic String
"assumpSV"   (UnitaryChunk -> Sentence
standardValuesDesc UnitaryChunk
loadDur)      String
"standardValues"      ConceptChunk
Doc.assumpDom
assumpGL :: ConceptInstance
assumpGL           = String -> Sentence -> String -> ConceptChunk -> ConceptInstance
forall c.
Concept c =>
String -> Sentence -> String -> c -> ConceptInstance
cic String
"assumpGL"   Sentence
glassLiteDesc                     String
"glassLite"           ConceptChunk
Doc.assumpDom
assumpBC :: ConceptInstance
assumpBC           = String -> Sentence -> String -> ConceptChunk -> ConceptInstance
forall c.
Concept c =>
String -> Sentence -> String -> c -> ConceptInstance
cic String
"assumpBC"   Sentence
boundaryConditionsDesc            String
"boundaryConditions"  ConceptChunk
Doc.assumpDom
assumpRT :: ConceptInstance
assumpRT           = String -> Sentence -> String -> ConceptChunk -> ConceptInstance
forall c.
Concept c =>
String -> Sentence -> String -> c -> ConceptInstance
cic String
"assumpRT"   Sentence
responseTypeDesc                  String
"responseType"        ConceptChunk
Doc.assumpDom
assumpLDFC :: ConceptInstance
assumpLDFC         = String -> Sentence -> String -> ConceptChunk -> ConceptInstance
forall c.
Concept c =>
String -> Sentence -> String -> c -> ConceptInstance
cic String
"assumpLDFC" (QuantityDict -> Sentence
ldfConstantDesc QuantityDict
lDurFac)         String
"ldfConstant"         ConceptChunk
Doc.assumpDom

glassTypeDesc :: Sentence
glassTypeDesc :: Sentence
glassTypeDesc = [Sentence] -> Sentence
foldlSent [String -> Sentence
S String
"The standard E1300-09a for",
  ConceptChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
phrase ConceptChunk
calculation, String -> Sentence
S String
"applies only to", SepType -> FoldType -> [Sentence] -> Sentence
foldlList SepType
Comma FoldType
Options ([Sentence] -> Sentence) -> [Sentence] -> Sentence
forall a b. (a -> b) -> a -> b
$ (String -> Sentence) -> [String] -> [Sentence]
forall a b. (a -> b) -> [a] -> [b]
map String -> Sentence
S [String
"monolithic",
  String
"laminated", String
"insulating"], String -> Sentence
S String
"glass constructions" Sentence -> Sentence -> Sentence
`S.of_` String -> Sentence
S String
"rectangular", ConceptChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
phrase ConceptChunk
shape, 
  String -> Sentence
S String
"with continuous", ConceptChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
phrase ConceptChunk
lateral, String -> Sentence
S String
"support along",
  SepType -> FoldType -> [Sentence] -> Sentence
foldlList SepType
Comma FoldType
Options ((String -> Sentence) -> [String] -> [Sentence]
forall a b. (a -> b) -> [a] -> [b]
map String -> Sentence
S [String
"one", String
"two", String
"three", String
"four"]) Sentence -> Sentence -> Sentence
+:+.
  IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
plural IdeaDict
edge, String -> Sentence
S String
"This", IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
phrase IdeaDict
practice Sentence -> Sentence -> Sentence
+: String -> Sentence
S String
"assumes that",
  EnumType
-> WrapType -> SepType -> FoldType -> [Sentence] -> Sentence
foldlEnumList EnumType
Numb WrapType
Parens SepType
SemiCol FoldType
List ([Sentence] -> Sentence) -> [Sentence] -> Sentence
forall a b. (a -> b) -> a -> b
$ ([Sentence] -> Sentence) -> [[Sentence]] -> [Sentence]
forall a b. (a -> b) -> [a] -> [b]
map [Sentence] -> Sentence
foldlSent_
  [[String -> Sentence
S String
"the supported glass", IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
plural IdeaDict
edge, String -> Sentence
S String
"for two, three" Sentence -> Sentence -> Sentence
`S.and_`
  String -> Sentence
S String
"four-sided support", IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
plural IdeaDict
condition, String -> Sentence
S String
"are simply supported" Sentence -> Sentence -> Sentence
`S.and_`
  String -> Sentence
S String
"free to slip in", IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
phrase IdeaDict
plane], 
  [String -> Sentence
S String
"glass supported on two sides acts as a simply supported", IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
phrase IdeaDict
beam], 
  [String -> Sentence
S String
"glass supported on one side acts as a", IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
phrase IdeaDict
cantilever]]]

glassConditionDesc :: Sentence
glassConditionDesc :: Sentence
glassConditionDesc = [Sentence] -> Sentence
foldlSent [String -> Sentence
S String
"Following", Citation -> RefInfo -> Sentence
forall r.
(HasUID r, HasRefAddress r, HasShortName r) =>
r -> RefInfo -> Sentence
complexRef Citation
astm2009 ([Int] -> RefInfo
Page [Int
1]) Sentence -> Sentence -> Sentence
`sC` 
  String -> Sentence
S String
"this", IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
phrase IdeaDict
practice, String -> Sentence
S String
"does not apply to any form of", SepType -> FoldType -> [Sentence] -> Sentence
foldlList SepType
Comma FoldType
Options ([Sentence] -> Sentence) -> [Sentence] -> Sentence
forall a b. (a -> b) -> a -> b
$ (String -> Sentence) -> [String] -> [Sentence]
forall a b. (a -> b) -> [a] -> [b]
map String -> Sentence
S [String
"wired",
  String
"patterned", String
"etched", String
"sandblasted", String
"drilled", String
"notched", String
"grooved glass"], String -> Sentence
S String
"with", 
  ConceptChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
phrase ConceptChunk
surface Sentence -> Sentence -> Sentence
`S.and_` String -> Sentence
S String
"edge treatments that alter the glass strength"]

explainScenarioDesc :: Sentence
explainScenarioDesc :: Sentence
explainScenarioDesc = [Sentence] -> Sentence
foldlSent [String -> Sentence
S String
"This", IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
phrase IdeaDict
system, String -> Sentence
S String
"only considers the external", 
  NP -> Sentence
forall n. NounPhrase n => n -> Sentence
phraseNP (ConceptChunk -> IdeaDict -> NP
forall c d. (NamedIdea c, NamedIdea d) => c -> d -> NP
combineNINI ConceptChunk
explosion IdeaDict
scenario), String -> Sentence
S String
"for its", ConceptChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
plural ConceptChunk
calculation]

standardValuesDesc :: UnitaryChunk -> Sentence
standardValuesDesc :: UnitaryChunk -> Sentence
standardValuesDesc UnitaryChunk
mainIdea = [Sentence] -> Sentence
foldlSent [NP -> Sentence
forall n. NounPhrase n => n -> Sentence
atStartNP' (IdeaDict -> NP
forall t. NamedIdea t => t -> NP
the IdeaDict
value), String -> Sentence
S String
"provided in",
  Section -> Sentence
forall r.
(HasUID r, HasRefAddress r, HasShortName r) =>
r -> Sentence
refS (Section -> Sentence) -> Section -> Sentence
forall a b. (a -> b) -> a -> b
$ [Contents] -> [Section] -> Section
SRS.valsOfAuxCons ([]::[Contents]) ([]::[Section]), String -> Sentence
S String
"are assumed for the", UnitaryChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
phrase UnitaryChunk
mainIdea, 
  Sentence -> Sentence
sParen (UnitaryChunk -> Sentence
forall c. (HasUID c, HasSymbol c) => c -> Sentence
ch UnitaryChunk
mainIdea) Sentence -> Sentence -> Sentence
`sC` String -> Sentence
S String
"and the", IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
plural IdeaDict
materialProprty Sentence -> Sentence -> Sentence
`S.of_` 
  SepType -> FoldType -> [Sentence] -> Sentence
foldlList SepType
Comma FoldType
List ((ConstQDef -> Sentence) -> [ConstQDef] -> [Sentence]
forall a b. (a -> b) -> [a] -> [b]
map ConstQDef -> Sentence
forall c. (HasUID c, HasSymbol c) => c -> Sentence
ch (Int -> [ConstQDef] -> [ConstQDef]
forall a. Int -> [a] -> [a]
take Int
3 [ConstQDef]
assumptionConstants))]

glassLiteDesc :: Sentence
glassLiteDesc :: Sentence
glassLiteDesc = [Sentence] -> Sentence
foldlSent [IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
atStart IdeaDict
glass, String -> Sentence
S String
"under consideration is assumed to be a single", 
  String -> Sentence
S String
"lite; hence, the", IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
phrase IdeaDict
value Sentence -> Sentence -> Sentence
`S.of_` CI -> Sentence
forall c. Idea c => c -> Sentence
short CI
lShareFac, String -> Sentence
S String
"is equal to 1 for all",
  ConceptChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
plural ConceptChunk
calculation Sentence -> Sentence -> Sentence
`S.in_` CI -> Sentence
forall c. Idea c => c -> Sentence
short CI
glassBR]

boundaryConditionsDesc :: Sentence
boundaryConditionsDesc :: Sentence
boundaryConditionsDesc = [Sentence] -> Sentence
foldlSent [String -> Sentence
S String
"Boundary", IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
plural IdeaDict
condition, String -> Sentence
S String
"for the",
  IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
phrase IdeaDict
glaSlab, String -> Sentence
S String
"are assumed to be 4-sided support for",
  ConceptChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
plural ConceptChunk
calculation]

responseTypeDesc :: Sentence
responseTypeDesc :: Sentence
responseTypeDesc = [Sentence] -> Sentence
foldlSent [NP -> Sentence
forall n. NounPhrase n => n -> Sentence
atStartNP (IdeaDict -> NP
forall t. NamedIdea t => t -> NP
the IdeaDict
responseTy), String -> Sentence
S String
"considered in",
  CI -> Sentence
forall c. Idea c => c -> Sentence
short CI
glassBR, String -> Sentence
S String
"is flexural"]

ldfConstantDesc :: QuantityDict -> Sentence
ldfConstantDesc :: QuantityDict -> Sentence
ldfConstantDesc QuantityDict
mainConcept = [Sentence] -> Sentence
foldlSent [String -> Sentence
S String
"With", IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
phrase IdeaDict
reference, String -> Sentence
S String
"to",
  ConceptInstance -> Sentence
forall r.
(HasUID r, HasRefAddress r, HasShortName r) =>
r -> Sentence
refS ConceptInstance
assumpSV Sentence -> Sentence -> Sentence
`sC` NP -> Sentence
forall n. NounPhrase n => n -> Sentence
phraseNP (NP -> NP
NP.the (IdeaDict
value IdeaDict -> QuantityDict -> NP
forall c d. (NamedIdea c, NamedIdea d) => c -> d -> NP
`of_`
  QuantityDict
mainConcept)), Sentence -> Sentence
sParen (QuantityDict -> Sentence
forall c. (HasUID c, HasSymbol c) => c -> Sentence
ch QuantityDict
mainConcept) Sentence -> Sentence -> Sentence
`S.is` NP -> Sentence
forall n. NounPhrase n => n -> Sentence
phraseNP (IdeaDict -> NP
forall t. NamedIdea t => t -> NP
a_ IdeaDict
constant)
  Sentence -> Sentence -> Sentence
`S.in_` CI -> Sentence
forall c. Idea c => c -> Sentence
short CI
glassBR]