module SDL.Cairo.Image.Load
   (
   
     loadRGB8
   , loadRGB16
   , loadRGBA8
   , loadRGBA16
   
   , ImgType (..)
   
   , defImageRGB8
   , defImageRGB16
   , defImageRGBA8
   , defImageRGBA16
   ) where
import Codec.Picture
import qualified Data.Vector.Storable as VecS (fromList)
data ImgType = PNG | JPG | BMP deriving (Show,Eq)
loadRGB8   :: ImgType -> FilePath -> IO (Image PixelRGB8)
loadRGB8 PNG fp = do
   ei <- readPng fp
   case ei of
      Right (ImageRGB8 img) -> do
         return img
      _ -> do
         return defImageRGB8
loadRGB8 JPG fp = do
   ei <- readJpeg fp
   case ei of
      Right (ImageRGB8 img) -> do
         return img
      _ -> do
         return defImageRGB8
loadRGB8 BMP fp = do
   ei <- readBitmap fp
   case ei of
      Right (ImageRGB8 img) -> do
         return img
      _ -> do
         return defImageRGB8
loadRGB16  :: ImgType -> FilePath -> IO (Image PixelRGB16)
loadRGB16 PNG fp = do
   ei <- readPng fp
   case ei of
      Right (ImageRGB16 img) -> do
         return img
      _ -> do
         return defImageRGB16
loadRGB16 JPG fp = do
   ei <- readJpeg fp
   case ei of
      Right (ImageRGB16 img) -> do
         return img
      _ -> do
         return defImageRGB16
loadRGB16 BMP fp = do
   ei <- readBitmap fp
   case ei of
      Right (ImageRGB16 img) -> do
         return img
      _ -> do
         return defImageRGB16
loadRGBA8  :: ImgType -> FilePath -> IO (Image PixelRGBA8)
loadRGBA8 PNG fp = do
   ei <- readPng fp
   case ei of
      Right (ImageRGBA8 img) -> do
         return img
      _ -> do
         return defImageRGBA8
loadRGBA8 JPG fp = do
   ei <- readJpeg fp
   case ei of
      Right (ImageRGBA8 img) -> do
         return img
      _ -> do
         return defImageRGBA8
loadRGBA8 BMP fp = do
   ei <- readBitmap fp
   case ei of
      Right (ImageRGBA8 img) -> do
         return img
      _ -> do
         return defImageRGBA8
loadRGBA16 :: ImgType -> FilePath -> IO (Image PixelRGBA16)
loadRGBA16 PNG fp = do
   ei <- readPng fp
   case ei of
      Right (ImageRGBA16 img) -> do
         return img
      _ -> do
         return defImageRGBA16
loadRGBA16 JPG fp = do
   ei <- readJpeg fp
   case ei of
      Right (ImageRGBA16 img) -> do
         return img
      _ -> do
         return defImageRGBA16
loadRGBA16 BMP fp = do
   ei <- readBitmap fp
   case ei of
      Right (ImageRGBA16 img) -> do
         return img
      _ -> do
         return defImageRGBA16
defImageRGB8 :: Image PixelRGB8
defImageRGB8 = Image
   { imageWidth = 5
   , imageHeight = 5
   , imageData = VecS.fromList
      [ 255,0,0,  0,0,0,   0,0,0,   0,0,0,   255,0,0
      , 0,0,0,    255,0,0, 0,0,0,   255,0,0, 0,0,0
      , 0,0,0,    0,0,0,   255,0,0, 0,0,0,   0,0,0
      , 0,0,0,    255,0,0, 0,0,0,   255,0,0, 0,0,0
      , 255,0,0,  0,0,0,   0,0,0,   0,0,0,   255,0,0
      ]
   }
defImageRGB16 :: Image PixelRGB16
defImageRGB16 = Image
   { imageWidth = 5
   , imageHeight = 5
   , imageData = VecS.fromList
      [ 255,0,0,  0,0,0,   0,0,0,   0,0,0,   255,0,0
      , 0,0,0,    255,0,0, 0,0,0,   255,0,0, 0,0,0
      , 0,0,0,    0,0,0,   255,0,0, 0,0,0,   0,0,0
      , 0,0,0,    255,0,0, 0,0,0,   255,0,0, 0,0,0
      , 255,0,0,  0,0,0,   0,0,0,   0,0,0,   255,0,0
      ]
   }
defImageRGBA8 :: Image PixelRGBA8
defImageRGBA8 = Image
   { imageWidth = 5
   , imageHeight = 5
   , imageData = VecS.fromList
      [ 255,0,0,255,  0,0,0,255,   0,0,0,255,   0,0,0,255,   255,0,0,255
      , 0,0,0,255,    255,0,0,255, 0,0,0,255,   255,0,0,255, 0,0,0,255
      , 0,0,0,255,    0,0,0,255,   255,0,0,255, 0,0,0,255,   0,0,0,255
      , 0,0,0,255,    255,0,0,255, 0,0,0,255,   255,0,0,255, 0,0,0,255
      , 255,0,0,255,  0,0,0,255,   0,0,0,255,   0,0,0,255,   255,0,0,255
      ]
   }
defImageRGBA16 :: Image PixelRGBA16
defImageRGBA16 = Image
   { imageWidth = 5
   , imageHeight = 5
   , imageData = VecS.fromList
      [ 255,0,0,255,  0,0,0,255,   0,0,0,255,   0,0,0,255,   255,0,0,255
      , 0,0,0,255,    255,0,0,255, 0,0,0,255,   255,0,0,255, 0,0,0,255
      , 0,0,0,255,    0,0,0,255,   255,0,0,255, 0,0,0,255,   0,0,0,255
      , 0,0,0,255,    255,0,0,255, 0,0,0,255,   255,0,0,255, 0,0,0,255
      , 255,0,0,255,  0,0,0,255,   0,0,0,255,   0,0,0,255,   255,0,0,255
      ]
   }