module Drasil.GlassBR.Changes (likelyChgs, unlikelyChgs) where

--A list of likely and unlikely changes for GlassBR

import Language.Drasil hiding (variable)
import Language.Drasil.Chunk.Concept.NamedCombinators

import Data.Drasil.Concepts.Documentation (condition, goal, input_, likeChgDom,
  software, system, unlikeChgDom, value, variable)
import Data.Drasil.Concepts.Math (calculation)
import Data.Drasil.Concepts.PhysicalProperties (flexure)

import Drasil.GlassBR.Assumptions (assumpGC, assumpES, assumpSV, assumpGL,
  assumpBC, assumpRT, assumpLDFC, assumptionConstants)
import Drasil.GlassBR.Concepts (blastRisk, glaSlab, glass)
import Drasil.GlassBR.Unitals (explosion, lite)

{--LIKELY CHANGES--}

likelyChgs :: [ConceptInstance]
likelyChgs :: [ConceptInstance]
likelyChgs = [ConceptInstance
calcInternalBlastRisk, ConceptInstance
varValsOfmkE, ConceptInstance
accMoreThanSingleLite,
  ConceptInstance
accMoreBoundaryConditions, ConceptInstance
considerMoreThanFlexGlass]

calcInternalBlastRisk, varValsOfmkE, accMoreThanSingleLite, accMoreBoundaryConditions,
  considerMoreThanFlexGlass :: ConceptInstance

calcInternalBlastRisk :: ConceptInstance
calcInternalBlastRisk     = String -> Sentence -> String -> ConceptChunk -> ConceptInstance
forall c.
Concept c =>
String -> Sentence -> String -> c -> ConceptInstance
cic "calcInternalBlastRisk"     (NamedChunk -> Sentence
calcInternalBlastRiskDesc NamedChunk
blastRisk) "Calculate-Internal-Blask-Risk"       ConceptChunk
likeChgDom
varValsOfmkE :: ConceptInstance
varValsOfmkE              = String -> Sentence -> String -> ConceptChunk -> ConceptInstance
forall c.
Concept c =>
String -> Sentence -> String -> c -> ConceptInstance
cic "varValsOfmkE"              Sentence
varValsOfmkEDesc                      "Variable-Values-of-m,k,E"            ConceptChunk
likeChgDom
accMoreThanSingleLite :: ConceptInstance
accMoreThanSingleLite     = String -> Sentence -> String -> ConceptChunk -> ConceptInstance
forall c.
Concept c =>
String -> Sentence -> String -> c -> ConceptInstance
cic "accMoreThanSingleLite"     Sentence
accMoreThanSingleLiteDesc             "Accomodate-More-than-Single-Lite"    ConceptChunk
likeChgDom
accMoreBoundaryConditions :: ConceptInstance
accMoreBoundaryConditions = String -> Sentence -> String -> ConceptChunk -> ConceptInstance
forall c.
Concept c =>
String -> Sentence -> String -> c -> ConceptInstance
cic "accMoreBoundaryConditions" Sentence
accMoreBoundaryConditionsDesc         "Accomodate-More-Boundary-Conditions" ConceptChunk
likeChgDom
considerMoreThanFlexGlass :: ConceptInstance
considerMoreThanFlexGlass = String -> Sentence -> String -> ConceptChunk -> ConceptInstance
forall c.
Concept c =>
String -> Sentence -> String -> c -> ConceptInstance
cic "considerMoreThanFlexGlass" Sentence
considerMoreThanFlexGlassDesc         "Consider-More-than-Flexure-Glass"    ConceptChunk
likeChgDom

calcInternalBlastRiskDesc :: NamedChunk -> Sentence
varValsOfmkEDesc, accMoreThanSingleLiteDesc, accMoreBoundaryConditionsDesc, considerMoreThanFlexGlassDesc :: Sentence

calcInternalBlastRiskDesc :: NamedChunk -> Sentence
calcInternalBlastRiskDesc mainConcept :: NamedChunk
mainConcept = [Sentence] -> Sentence
foldlSent [ConceptInstance -> Sentence -> Sentence
forall x.
(HasShortName x, Referable x) =>
x -> Sentence -> Sentence
chgsStart ConceptInstance
assumpES (String -> Sentence
S "The"),
  NamedChunk -> Sentence
forall n. (HasUID n, NamedIdea n) => n -> Sentence
phrase NamedChunk
system, String -> Sentence
S "currently only calculates for external" Sentence -> Sentence -> Sentence
+:+.
  NamedChunk -> Sentence
forall n. (HasUID n, NamedIdea n) => n -> Sentence
phrase NamedChunk
mainConcept, String -> Sentence
S "In the future,", ConceptChunk -> Sentence
forall n. (HasUID n, NamedIdea n) => n -> Sentence
plural ConceptChunk
calculation,
  String -> Sentence
S "can be added for the internal", NamedChunk -> Sentence
forall n. (HasUID n, NamedIdea n) => n -> Sentence
phrase NamedChunk
mainConcept]

varValsOfmkEDesc :: Sentence
varValsOfmkEDesc = [Sentence] -> Sentence
foldlSent [ConceptInstance -> Sentence
forall r.
(HasUID r, HasRefAddress r, HasShortName r) =>
r -> Sentence
refS ConceptInstance
assumpSV Sentence -> Sentence -> Sentence
`sC` ConceptInstance -> Sentence -> Sentence
forall x.
(HasShortName x, Referable x) =>
x -> Sentence -> Sentence
chgsStart ConceptInstance
assumpLDFC (String -> Sentence
S "Currently, the"),
  NamedChunk -> Sentence
forall n. (HasUID n, NamedIdea n) => n -> Sentence
plural NamedChunk
value, String -> Sentence
S "for", 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 3 [ConstQDef]
assumptionConstants)),
  String -> Sentence
S "are assumed to be the same for all" Sentence -> Sentence -> Sentence
+:+. NamedChunk -> Sentence
forall n. (HasUID n, NamedIdea n) => n -> Sentence
phrase NamedChunk
glass,
  String -> Sentence
S "In the future, these", NamedChunk -> Sentence
forall n. (HasUID n, NamedIdea n) => n -> Sentence
plural NamedChunk
value, String -> Sentence
S "can be changed to",
  NP -> Sentence
forall n. NounPhrase n => n -> Sentence
pluralNP (NamedChunk -> NamedChunk -> NP
forall c d. (NamedIdea c, NamedIdea d) => c -> d -> NP
combineNINI NamedChunk
variable NamedChunk
input_)]

accMoreThanSingleLiteDesc :: Sentence
accMoreThanSingleLiteDesc = [Sentence] -> Sentence
foldlSent [ConceptInstance -> Sentence -> Sentence
forall x.
(HasShortName x, Referable x) =>
x -> Sentence -> Sentence
chgsStart ConceptInstance
assumpGL (String -> Sentence
S "The"), NamedChunk -> Sentence
forall n. (HasUID n, NamedIdea n) => n -> Sentence
phrase NamedChunk
software,
  String -> Sentence
S "may be changed to accommodate more than a single", ConceptChunk -> Sentence
forall n. (HasUID n, NamedIdea n) => n -> Sentence
phrase ConceptChunk
lite]

accMoreBoundaryConditionsDesc :: Sentence
accMoreBoundaryConditionsDesc = [Sentence] -> Sentence
foldlSent [ConceptInstance -> Sentence -> Sentence
forall x.
(HasShortName x, Referable x) =>
x -> Sentence -> Sentence
chgsStart ConceptInstance
assumpBC (String -> Sentence
S "The"), NamedChunk -> Sentence
forall n. (HasUID n, NamedIdea n) => n -> Sentence
phrase NamedChunk
software,
  String -> Sentence
S "may be changed to accommodate more boundary", NamedChunk -> Sentence
forall n. (HasUID n, NamedIdea n) => n -> Sentence
plural NamedChunk
condition,
  String -> Sentence
S "than 4-sided support"]

considerMoreThanFlexGlassDesc :: Sentence
considerMoreThanFlexGlassDesc = [Sentence] -> Sentence
foldlSent [ConceptInstance -> Sentence -> Sentence
forall x.
(HasShortName x, Referable x) =>
x -> Sentence -> Sentence
chgsStart ConceptInstance
assumpRT (String -> Sentence
S "The"), NamedChunk -> Sentence
forall n. (HasUID n, NamedIdea n) => n -> Sentence
phrase NamedChunk
software,
  String -> Sentence
S "may be changed to consider more than just", ConceptChunk -> Sentence
forall n. (HasUID n, NamedIdea n) => n -> Sentence
phrase ConceptChunk
flexure,
  String -> Sentence
S "of the glass"]

{--UNLIKELY CHANGES--}

unlikelyChgs :: [ConceptInstance]
unlikelyChgs :: [ConceptInstance]
unlikelyChgs = [ConceptInstance
predictWithstandOfCertDeg, ConceptInstance
accAlteredGlass]

predictWithstandOfCertDeg, accAlteredGlass :: ConceptInstance

predictWithstandOfCertDeg :: ConceptInstance
predictWithstandOfCertDeg = String -> Sentence -> String -> ConceptChunk -> ConceptInstance
forall c.
Concept c =>
String -> Sentence -> String -> c -> ConceptInstance
cic "predictWithstandOfCertDeg" Sentence
predictWithstandOfCertDegDesc "Predict-Withstanding-of-Certain-Degree"  ConceptChunk
unlikeChgDom
accAlteredGlass :: ConceptInstance
accAlteredGlass           = String -> Sentence -> String -> ConceptChunk -> ConceptInstance
forall c.
Concept c =>
String -> Sentence -> String -> c -> ConceptInstance
cic "accAlteredGlass"           Sentence
accAlteredGlassDesc           "Accommodate-Altered-Glass"               ConceptChunk
unlikeChgDom

predictWithstandOfCertDegDesc, accAlteredGlassDesc :: Sentence

predictWithstandOfCertDegDesc :: Sentence
predictWithstandOfCertDegDesc = [Sentence] -> Sentence
foldlSent [NP -> Sentence
forall n. NounPhrase n => n -> Sentence
atStartNP (NamedChunk
goal NamedChunk -> NamedChunk -> NP
forall c d. (NamedIdea c, NamedIdea d) => c -> d -> NP
`the_ofThe` NamedChunk
system),
  String -> Sentence
S "is to predict whether the", NamedChunk -> Sentence
forall n. (HasUID n, NamedIdea n) => n -> Sentence
phrase NamedChunk
glaSlab, String -> Sentence
S "under consideration can",
  String -> Sentence
S "withstand an", ConceptChunk -> Sentence
forall n. (HasUID n, NamedIdea n) => n -> Sentence
phrase ConceptChunk
explosion, String -> Sentence
S "of a certain degree"]

accAlteredGlassDesc :: Sentence
accAlteredGlassDesc = [Sentence] -> Sentence
foldlSent [ConceptInstance -> Sentence
forall r.
(HasUID r, HasRefAddress r, HasShortName r) =>
r -> Sentence
refS ConceptInstance
assumpGC, String -> Sentence
S "requires that the", NamedChunk -> Sentence
forall n. (HasUID n, NamedIdea n) => n -> Sentence
phrase NamedChunk
glass Sentence -> Sentence -> Sentence
+:+.
  String -> Sentence
S "is not altered in any way", String -> Sentence
S "Therefore, this cannot be used on altered",
  NamedChunk -> Sentence
forall n. (HasUID n, NamedIdea n) => n -> Sentence
phrase NamedChunk
glass]