module Codec.GlTF.Image
  ( ImageIx(..)
  , Image(..)
  ) where

import Codec.GlTF.Prelude

import Codec.GlTF.BufferView (BufferViewIx)
import Codec.GlTF.URI (URI)

newtype ImageIx = ImageIx { unImageIx :: Int }
  deriving (Eq, Ord, Show, FromJSON, ToJSON, Generic)

-- | Image data used to create a texture.
--
-- Image can be referenced by URI or bufferView index.
-- @mimeType@ is required in the latter case.
data Image = Image
  { uri        :: Maybe URI
  , mimeType   :: Maybe Text
  , bufferView :: Maybe BufferViewIx
  , name       :: Maybe Text
  , extensions :: Maybe Object
  , extras     :: Maybe Value
  } deriving (Eq, Show, Generic)

instance FromJSON Image
instance ToJSON Image