{- Types
Gregory W. Schwartz

Collects the types used in the program
-}

module Types where

-- Standard
import qualified Data.IntMap.Strict as IMap
import qualified Data.Map.Strict as Map
import qualified Data.Set as Set

-- Cabal
import qualified Data.Text as T
import Turtle

-- Local


-- Algebraic
data Preprocess = Assembly | NonAssembly Char deriving (Read, Show)
data TrinityArgs = TrinityBase | TrinityGenome | TrinityCustom String deriving (Read, Show)
data Query = QueryFile Turtle.FilePath | QueryShell (Shell Line)

-- Basic
newtype Position = Position
    { unPosition :: Int
    } deriving (Show)
newtype Sequence = Sequence
    { unSequence :: T.Text
    } deriving (Show)
newtype Fill = Fill
    { unFill :: Char
    } deriving (Show)
newtype Command = Command
    { unCommand :: T.Text
    } deriving (Show)
newtype Args = Args
    { unArgs :: String
    } deriving (Show)
newtype Subject = Subject
    { unSubject :: Turtle.FilePath
    } deriving (Show)

-- Advanced
newtype BamRow = BamRow
    { unBamRow :: [T.Text]
    } deriving (Read, Show)
newtype Headers = Headers
    { unHeaders :: T.Text
    }
newtype AbundanceMap = AbundanceMap
    { unAbundanceMap :: Map.Map T.Text Double
    }
newtype FrequencyMap = FrequencyMap
    { unFrequencyMap :: Map.Map T.Text Double
    }
newtype DuplicationRow = DuplicationRow
    { unDuplicationRow :: Map.Map T.Text T.Text
    }
newtype PositionMap = PositionMap
    { unPositionMap :: IMap.IntMap Char
    }
newtype AccessionMap = AccessionMap
    { unAccessionMap :: Map.Map T.Text T.Text
    } deriving (Read, Show)
newtype BlastSet = BlastSet
    { unBlastSet :: Set.Set T.Text
    }
newtype AccSet = AccSet
    { unAccSet :: Set.Set T.Text
    }
newtype MatchMap = MatchMap
    { unMatchMap :: Map.Map T.Text Bool
    }