module AWS.Lambda.Events.S3.PutEvent (
  PutEvent,
  RequestParameters(..),
  Record(..)
) where

import Data.Text (Text)
import GHC.Generics (Generic)
import Data.Aeson (FromJSON)

type PutEvent = [Record]

data RequestParameters = RequestParameters { sourceIPAddress :: Text } deriving (Show, Eq, Generic)

data Record = Record {
  eventVersion :: Text,
  eventTime :: Text, -- Should be date
  requestParameters :: RequestParameters
}

{-
{
  "eventVersion": "2.0",
  "eventTime": "1970-01-01T00:00:00.000Z",
  "requestParameters": {
    "sourceIPAddress": "127.0.0.1"
  },
  "s3": {
    "configurationId": "testConfigRule",
    "object": {
      "eTag": "0123456789abcdef0123456789abcdef",
      "sequencer": "0A1B2C3D4E5F678901",
      "key": "HappyFace.jpg",
      "size": 1024
    },
    "bucket": {
      "arn": bucketarn,
      "name": "sourcebucket",
      "ownerIdentity": {
        "principalId": "EXAMPLE"
      }
    },
    "s3SchemaVersion": "1.0"
  },
  "responseElements": {
    "x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
    "x-amz-request-id": "EXAMPLE123456789"
  },
  "awsRegion": "us-east-1",
  "eventName": "ObjectCreated:Put",
  "userIdentity": {
    "principalId": "EXAMPLE"
  },
  "eventSource": "aws:s3"
}
-}