{-# LANGUAGE OverloadedStrings #-}

-- | This modules exposes the 'CourseStore'.
module Study.Courses.CourseStore (courseStore) where

import Core
import qualified Study.Courses.English.Grammar.Introduction.Course as Introduction
import qualified Study.Courses.English.Grammar.Crash.Course as Crash
import qualified Study.Courses.English.Vocabulary.Brivla.Course as Brivla
import qualified Study.Courses.English.Vocabulary.Attitudinals.Course as Attitudinals
import qualified Data.Map as M

-- | Course store.
courseStore :: CourseStore
courseStore :: CourseStore
courseStore = Map Text CourseCollection -> Map Text Course -> CourseStore
CourseStore Map Text CourseCollection
collectionsMap Map Text Course
coursesMap where
    collectionsList :: [CourseCollection]
collectionsList = [ CourseCollection
collectionEnglishGrammar, CourseCollection
collectionEnglishVocabulary ]
    collectionsMap :: Map Text CourseCollection
collectionsMap = [(Text, CourseCollection)] -> Map Text CourseCollection
forall k a. Ord k => [(k, a)] -> Map k a
M.fromList ([(Text, CourseCollection)] -> Map Text CourseCollection)
-> [(Text, CourseCollection)] -> Map Text CourseCollection
forall a b. (a -> b) -> a -> b
$ (CourseCollection -> (Text, CourseCollection))
-> [CourseCollection] -> [(Text, CourseCollection)]
forall a b. (a -> b) -> [a] -> [b]
map (\CourseCollection
collection -> (CourseCollection -> Text
courseCollectionId CourseCollection
collection, CourseCollection
collection)) [CourseCollection]
collectionsList
    coursesList :: [Course]
coursesList = [ Course
Introduction.course, Course
Crash.course, Course
Brivla.course, Course
Attitudinals.course ]
    coursesMap :: Map Text Course
coursesMap = [(Text, Course)] -> Map Text Course
forall k a. Ord k => [(k, a)] -> Map k a
M.fromList ([(Text, Course)] -> Map Text Course)
-> [(Text, Course)] -> Map Text Course
forall a b. (a -> b) -> a -> b
$ (Course -> (Text, Course)) -> [Course] -> [(Text, Course)]
forall a b. (a -> b) -> [a] -> [b]
map (\Course
course -> (Course -> Text
courseId Course
course, Course
course)) [Course]
coursesList

-- | Collection: grammar courses in English.
collectionEnglishGrammar :: CourseCollection
collectionEnglishGrammar :: CourseCollection
collectionEnglishGrammar = Text -> [Course] -> CourseCollection
CourseCollection Text
collectionId [Course]
collectionCourses where
    collectionId :: Text
collectionId = Text
"grammar_eng"
    collectionCourses :: [Course]
collectionCourses =
        [ Course
Introduction.course
        , Course
Crash.course
        ]

-- | Collection: vocabulary courses in English.
collectionEnglishVocabulary :: CourseCollection
collectionEnglishVocabulary :: CourseCollection
collectionEnglishVocabulary = Text -> [Course] -> CourseCollection
CourseCollection Text
collectionId [Course]
collectionCourses where
    collectionId :: Text
collectionId = Text
"vocabulary_eng"
    collectionCourses :: [Course]
collectionCourses =
        [ Course
Brivla.course
        , Course
Attitudinals.course
        ]