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

module Network.DigitalOcean.Services.SSHKey where

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

data SSHKey = SSHKey
  { sshkeyId          :: SSHKeyId
  , sshkeyFingerprint :: String
  , sshkeyPublicKey   :: String
  , sshkeyName        :: String
  } deriving (Show, Generic)

instance FromJSON SSHKey where
  parseJSON = genericParseJSON $ aesonPrefix snakeCase

instance ToJSON SSHKey where
  toJSON = genericToJSON $ aesonPrefix snakeCase

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

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

-----------------------------------------------------------------

data SSHKeyPayload = SSHKeyPayload
  { sshkeypayloadName      :: String
  , sshkeypayloadPublicKey :: String
  } deriving (Show, Generic)

instance ToJSON SSHKeyPayload where
  toJSON = genericToJSON $ aesonPrefix snakeCase

instance Payload SSHKeyPayload

-----------------------------------------------------------------

data SSHKeyNamePayload = SSHKeyNamePayload
  { sshkeynamepayloadName :: String
  } deriving (Show, Generic)

instance ToJSON SSHKeyNamePayload where
  toJSON = genericToJSON $ aesonPrefix snakeCase

instance Payload SSHKeyNamePayload