{-# LANGUAGE OverloadedStrings #-}
module Aws.S3.Info
where

import           Aws.Http
import           Aws.S3.Model
import           Data.Time
import qualified Data.ByteString as B

data S3Authorization 
    = S3AuthorizationHeader 
    | S3AuthorizationQuery
    deriving (Show)

data Endpoint
    = Endpoint {
        endpointHost :: B.ByteString
      , endpointDefaultLocationConstraint :: LocationConstraint
      , endpointAllowedLocationConstraints :: [LocationConstraint]
      }
    deriving (Show)

data S3Info
    = S3Info {
        s3Protocol :: Protocol
      , s3Endpoint :: Endpoint
      , s3Port :: Int
      , s3UseUri :: Bool
      , s3DefaultExpiry :: NominalDiffTime
      }
    deriving (Show)

s3EndpointUsClassic :: Endpoint
s3EndpointUsClassic 
    = Endpoint { 
        endpointHost = "s3.amazonaws.com"
      , endpointDefaultLocationConstraint = locationUsClassic
      , endpointAllowedLocationConstraints = [locationUsClassic
                                             , locationUsWest
                                             , locationEu
                                             , locationApSouthEast
                                             , locationApNorthEast]
      }

s3EndpointUsWest :: Endpoint
s3EndpointUsWest
    = Endpoint {
        endpointHost = "s3-us-west-1.amazonaws.com"
      , endpointDefaultLocationConstraint = locationUsWest
      , endpointAllowedLocationConstraints = [locationUsWest]
      }

s3EndpointEu :: Endpoint
s3EndpointEu
    = Endpoint {
        endpointHost = "s3-eu-west-1.amazonaws.com"
      , endpointDefaultLocationConstraint = locationEu
      , endpointAllowedLocationConstraints = [locationEu]
      }

s3EndpointApSouthEast :: Endpoint
s3EndpointApSouthEast
    = Endpoint {
        endpointHost = "s3-ap-southeast-1.amazonaws.com"
      , endpointDefaultLocationConstraint = locationApSouthEast
      , endpointAllowedLocationConstraints = [locationApSouthEast]
      }

s3EndpointApNorthEast :: Endpoint
s3EndpointApNorthEast
    = Endpoint {
        endpointHost = "s3-ap-northeast-1.amazonaws.com"
      , endpointDefaultLocationConstraint = locationApNorthEast
      , endpointAllowedLocationConstraints = [locationApNorthEast]
      }

s3 :: Protocol -> Endpoint -> Bool -> S3Info
s3 protocol endpoint uri 
    = S3Info { 
        s3Protocol = protocol
      , s3Endpoint = endpoint
      , s3Port = defaultPort protocol
      , s3UseUri = uri
      , s3DefaultExpiry = 15*60
      }