module Aws.S3.Model
where

import           Aws.S3.Error
import           Control.Monad.Compose.Class
import           Data.Time
import           Text.XML.Monad
import qualified Text.XML.Light              as XL

type CanonicalUserId = String

data UserInfo
    = UserInfo {
        userId :: CanonicalUserId
      , userDisplayName :: String
      }
    deriving (Show)

parseUserInfo :: Xml S3Error XL.Element UserInfo
parseUserInfo = do
  id_ <- strContent <<< findElementNameUI "ID"
  displayName <- strContent <<< findElementNameUI "DisplayName"
  return UserInfo { userId = id_, userDisplayName = displayName }

type Bucket = String

data BucketInfo
    = BucketInfo {
        bucketName :: Bucket
      , bucketCreationDate :: UTCTime
      }
    deriving (Show)

data ObjectInfo
    = ObjectInfo {
        objectKey :: String
      , objectLastModified :: UTCTime
      , objectETag :: String
      , objectSize :: Integer
      , objectStorageClass :: StorageClass
      , objectOwner :: UserInfo
      }
    deriving (Show)

data StorageClass 
    = StorageClassStandard
    deriving (Show)

type LocationConstraint = String

locationUsClassic, locationUsWest, locationEu, locationApSouthEast, locationApNorthEast :: LocationConstraint
locationUsClassic = ""
locationUsWest = "us-west-1"
locationEu = "EU"
locationApSouthEast = "ap-southeast-1"
locationApNorthEast = "ap-northeast-1"