-- | This module defines structures and functions for handling README files,
-- which are used as auxiliary documentation files for the system.
module Language.Drasil.Code.Imperative.ReadMe.Import (
  ReadMeInfo(..),
) where

import Language.Drasil.Mod (Name, Version)
import Language.Drasil.Choices (ImplementationType)

-- | Language name.
type LangAbbrev = String
-- | Programming language version.
type LangVers = String
-- | Case name.
type CaseName = String
-- | Purpose of example
type ExamplePurpose = String
-- | Description of example
type ExampleDescr = String
-- | Motivation of example
type ExampleMotivation = String
-- | Scope of example
type ExampleScope = String
-- | File contributors
type Contributor = String
-- | Input File
type InFile = String
-- | Output File
type OutFile = String

-- | Holds all information needed to create a README file.
data ReadMeInfo = ReadMeInfo {
  ReadMeInfo -> LangAbbrev
langName :: LangAbbrev,
  ReadMeInfo -> LangAbbrev
langVersion :: LangVers,
  ReadMeInfo -> Maybe LangAbbrev
invalidOS :: Maybe String,
  ReadMeInfo -> ImplementationType
implementType :: ImplementationType,
  ReadMeInfo -> [(LangAbbrev, LangAbbrev)]
extLibNV :: [(Name, Version)],
  ReadMeInfo -> [LangAbbrev]
extLibFP :: [FilePath],
  ReadMeInfo -> [LangAbbrev]
contributors :: [Contributor],
  ReadMeInfo -> [LangAbbrev]
configFP :: [FilePath],
  ReadMeInfo -> LangAbbrev
caseName :: CaseName,
  ReadMeInfo -> LangAbbrev
examplePurpose :: ExamplePurpose,
  ReadMeInfo -> LangAbbrev
exampleDescr :: ExampleDescr,
  ReadMeInfo -> LangAbbrev
exampleMotivation :: ExampleMotivation,
  ReadMeInfo -> LangAbbrev
exampleScope :: ExampleScope,
  ReadMeInfo -> Int
folderNum :: Int,
  ReadMeInfo -> (LangAbbrev, LangAbbrev)
inputOutput :: (InFile, OutFile)
}