module Reanimate.Parameters
  ( Raster(..)
  , Width
  , Height
  , FPS
  , pRaster
  , pFPS
  , pWidth
  , pHeight
  , pNoExternals
  , pRootDirectory
  , setRaster
  , setFPS
  , setWidth
  , setHeight
  , setNoExternals
  , setRootDirectory
  ) where
import System.IO.Unsafe
import Data.IORef
type Width = Int
type Height = Int
type FPS = Int
data Raster
  = RasterNone     
  | RasterAuto     
  | RasterInkscape 
  | RasterRSvg     
  | RasterMagick   
  deriving (Show, Eq)
{-# NOINLINE pRasterRef #-}
pRasterRef :: IORef Raster
pRasterRef = unsafePerformIO (newIORef RasterNone)
{-# NOINLINE pRaster #-}
pRaster :: Raster
pRaster = unsafePerformIO (readIORef pRasterRef)
setRaster :: Raster -> IO ()
setRaster = writeIORef pRasterRef
{-# NOINLINE pFPSRef #-}
pFPSRef :: IORef FPS
pFPSRef = unsafePerformIO (newIORef 0)
{-# NOINLINE pFPS #-}
pFPS :: FPS
pFPS = unsafePerformIO (readIORef pFPSRef)
setFPS :: FPS -> IO ()
setFPS = writeIORef pFPSRef
{-# NOINLINE pWidthRef #-}
pWidthRef :: IORef FPS
pWidthRef = unsafePerformIO (newIORef 0)
{-# NOINLINE pWidth #-}
pWidth :: Width
pWidth = unsafePerformIO (readIORef pWidthRef)
setWidth :: Width -> IO ()
setWidth = writeIORef pWidthRef
{-# NOINLINE pHeightRef #-}
pHeightRef :: IORef FPS
pHeightRef = unsafePerformIO (newIORef 0)
{-# NOINLINE pHeight #-}
pHeight :: Height
pHeight = unsafePerformIO (readIORef pHeightRef)
setHeight :: Height -> IO ()
setHeight = writeIORef pHeightRef
{-# NOINLINE pNoExternalsRef #-}
pNoExternalsRef :: IORef Bool
pNoExternalsRef = unsafePerformIO (newIORef False)
{-# NOINLINE pNoExternals #-}
pNoExternals :: Bool
pNoExternals = unsafePerformIO (readIORef pNoExternalsRef)
setNoExternals :: Bool -> IO ()
setNoExternals = writeIORef pNoExternalsRef
{-# NOINLINE pRootDirectoryRef #-}
pRootDirectoryRef :: IORef FilePath
pRootDirectoryRef = unsafePerformIO (newIORef (error "root directory not set"))
{-# NOINLINE pRootDirectory #-}
pRootDirectory :: FilePath
pRootDirectory = unsafePerformIO (readIORef pRootDirectoryRef)
setRootDirectory :: FilePath -> IO ()
setRootDirectory = writeIORef pRootDirectoryRef