{-# LANGUAGE TemplateHaskell #-}

module Config where

import Data.Label
import System.Console.GetOpt

data Config = Config
  {
    _configSize         :: Int
  , _configZoom         :: Int
  , _configScale        :: Float
  , _configDegree       :: Int
  }
  deriving Show

$(mkLabels [''Config])

defaults :: Config
defaults = Config
  { _configSize         = 200
  , _configZoom         = 3
  , _configScale        = 30
  , _configDegree       = 5
  }


options :: [OptDescr (Config -> Config)]
options =
  [ Option []   ["size"]        (ReqArg (set configSize . read) "INT")          "visualisation size (200)"
  , Option []   ["zoom"]        (ReqArg (set configZoom . read) "INT")          "pixel replication factor (3)"
  , Option []   ["scale"]       (ReqArg (set configScale . read) "FLOAT")       "feature size of visualisation (30)"
  , Option []   ["degree"]      (ReqArg (set configDegree . read) "INT")        "number of waves to sum for each point (5)"
  ]


header :: [String]
header =
  [ "accelerate-crystal (c) [2011..2014] The Accelerate Team"
  , ""
  , "Usage: accelerate-crystal [OPTIONS]"
  , ""
  ]

footer :: [String]
footer = [ "" ]