{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE DeriveGeneric #-}

module Network.DigitalOcean.Services.Snapshot where

-----------------------------------------------------------------
import        Data.Aeson
import        Data.Aeson.Casing
import        Data.Time.Clock
import        GHC.Generics
-----------------------------------------------------------------
import        Network.DigitalOcean.Types
-----------------------------------------------------------------

data Snapshot = Snapshot
  { snapshotId             :: String
  , snapshotName           :: String
  , snapshotCreatedAt      :: UTCTime
  , snapshotRegions        :: [String]
  , snapshotResourceId     :: String
  , snapshotResourceType   :: String
  , snapshotMinDiskSize    :: Double
  , snapshotSizeGigabytes  :: Double
  } deriving (Show, Generic)

instance FromJSON (Response [Snapshot]) where
  parseJSON (Object v) =
    fmap Response $ parseJSON =<< (v .: "snapshots")

instance FromJSON (Response Snapshot) where
  parseJSON (Object v) =
    fmap Response $ parseJSON =<< (v .: "snapshot")

instance FromJSON Snapshot where
  parseJSON = genericParseJSON $ aesonPrefix snakeCase

newtype SnapshotPayload = SnapshotPayload
  { snapshotpayloadName :: String
  } deriving (Show, Generic)

instance ToJSON SnapshotPayload where
  toJSON = genericToJSON $ aesonPrefix snakeCase

instance Payload SnapshotPayload where