# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: MIT-0

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: AWS Serverless backend.
Resources:
  BucketPolicy:
    Type: 'AWS::S3::BucketPolicy'
    Properties:
      Bucket: !Ref Bucket
      PolicyDocument:
        Version: '2008-10-17'
        Id: Policy1358882281037
        Statement:
        - Sid: Stmt1358882255300
          Effect: Allow
          Principal:
            AWS:
              - arn:aws:iam::934700192993:root
              - arn:aws:iam::255105206797:role/hammerstone_to_s3
          Action:
            - s3:List*
            - s3:Get*
            - s3:Put*
            - s3:Delete*
          Resource:
            - arn:aws:s3:::aws-data/*
            - arn:aws:s3:::aws-data
        - Effect: Deny
          Principal: '*'
          Action: '*'
          Resource: arn:aws:s3:::aws-data/*
          Condition:
            Bool:
              aws:SecureTransport: 'false'

  Bucket:
    Type: 'AWS::S3::Bucket'      
    Properties:
      BucketName: "aws-data"
      PublicAccessBlockConfiguration:
        BlockPublicAcls: true
        BlockPublicPolicy: true
        IgnorePublicAcls: true
        RestrictPublicBuckets: true
      BucketEncryption:
        ServerSideEncryptionConfiguration:
          - ServerSideEncryptionByDefault:
              SSEAlgorithm: AES256
            # KMSMasterKeyID: becba9d7-bb39-4666-bf70-6039c3170a6d
            # SSEAlgorithm: aws:kms
      LifecycleConfiguration:
        Rules:
          - Id: SAM-10-Days-Rule
            Status: Enabled
            NoncurrentVersionExpirationInDays: 10
      VersioningConfiguration:
        Status: Enabled

  deleteStagingTableData:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python3.8
      CodeUri: deleteStagingTableData/
      Description: 'Dynamic Function which truncates the given staging table'
      MemorySize: 2560
      Timeout: 900
      Role: arn:aws:iam::815423538953:role/API-Lambda-Role
      VpcConfig:
        SecurityGroupIds:
          - sg-037694c2eba9df875
        SubnetIds:
          - subnet-069ac8cb1704b4cf8
          - subnet-022c6613a366b1cb8
      Layers:
        - 'arn:aws:lambda:eu-west-2:815423538953:layer:myPymysqlLayer:1'

  updateProdFromStagingTable:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python3.8
      CodeUri: updateProdFromStagingTable/
      Description: ''
      MemorySize: 1280
      Timeout: 600
      Role: arn:aws:iam::815423538953:role/API-Lambda-Role
      VpcConfig:
        SecurityGroupIds:
          - sg-037694c2eba9df875
        SubnetIds:
          - subnet-069ac8cb1704b4cf8
          - subnet-022c6613a366b1cb8
      Layers:
        - 'arn:aws:lambda:eu-west-2:815423538953:layer:myPymysqlLayer:1'

  triggerEmployeesStateMachine:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python3.8
      CodeUri: triggerEmployeesStateMachine/
      Description: ''
      MemorySize: 128
      Timeout: 10
      Role: 'arn:aws:iam::815423538953:role/API-Lambda-Role'
      Events:
        BucketEvent1:
          Type: S3
          Properties:
            Bucket:
              Ref: Bucket
            Events:
              - 's3:ObjectCreated:*'
            Filter:
              S3Key:
                Rules:
                  - Name: prefix
                    Value: Enablement_DWH/employees/result/
  
  triggerKnetStateMachine:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python3.8
      CodeUri: triggerKnetStateMachine/
      Description: ''
      MemorySize: 128
      Timeout: 10
      Role: 'arn:aws:iam::815423538953:role/API-Lambda-Role'
      Events:
        BucketEvent1:
          Type: S3
          Properties:
            Bucket:
              Ref: Bucket
            Events:
              - 's3:ObjectCreated:*'
            Filter:
              S3Key:
                Rules:
                  - Name: prefix
                    Value: Enablement_DWH/knet/result/

  triggerArtifactsStateMachine:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python3.8
      CodeUri: triggerArtifactsStateMachine/
      Description: ''
      MemorySize: 128
      Timeout: 10
      Role: 'arn:aws:iam::815423538953:role/API-Lambda-Role'
      Events:
        BucketEvent1:
          Type: S3
          Properties:
            Bucket:
              Ref: Bucket
            Events:
              - 's3:ObjectCreated:*'
            Filter:
              S3Key:
                Rules:
                  - Name: prefix
                    Value: quasarpse/artifacts/ 
                  - Name: suffix
                    Value: .parquet
 
  triggerSkillsStateMachine:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python3.8
      CodeUri: triggerSkillsStateMachine/
      Description: ''
      MemorySize: 128
      Timeout: 10
      Role: 'arn:aws:iam::815423538953:role/API-Lambda-Role'
      Events:
        BucketEvent1:
          Type: S3
          Properties:
            Bucket:
              Ref: Bucket
            Events:
              - 's3:ObjectCreated:*'
            Filter:
              S3Key:
                Rules:
                  - Name: prefix
                    Value: quasarpse/psa_skills_certs/
                  - Name: suffix
                    Value: .parquet

  triggerMindtickleStateMachine:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python3.8
      CodeUri: triggerMindtickleStateMachine/
      Description: ''
      MemorySize: 128
      Timeout: 10
      Role: 'arn:aws:iam::815423538953:role/API-Lambda-Role'
      Events:
        BucketEvent1:
          Type: S3
          Properties:
            Bucket:
              Ref: Bucket
            Events:
              - 's3:ObjectCreated:*'
            Filter:
              S3Key:
                Rules:
                  - Name: prefix
                    Value: Enablement_DWH/mindtickle/result/

  triggerUtilStateMachine:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python3.8
      CodeUri: triggerUtilStateMachine/
      Description: ''
      MemorySize: 128
      Timeout: 10
      Role: 'arn:aws:iam::815423538953:role/API-Lambda-Role'
      Events:
        BucketEvent1:
          Type: S3
          Properties:
            Bucket:
              Ref: Bucket
            Events:
              - 's3:ObjectCreated:*'
            Filter:
              S3Key:
                Rules:
                  - Name: prefix
                    Value: quasarpse/utilization_detail_c/
                  - Name: suffix
                    Value: .parquet


  triggerEvaStateMachine:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python3.8
      CodeUri: triggerEvaStateMachine/
      Description: ''
      MemorySize: 128
      Timeout: 10
      Role: 'arn:aws:iam::815423538953:role/API-Lambda-Role'
      Events:
        BucketEvent1:
          Type: S3
          Properties:
            Bucket:
              Ref: Bucket
            Events:
              - 's3:ObjectCreated:*'
            Filter:
              S3Key:
                Rules:
                  - Name: prefix
                    Value: quasarpse/est_vs_actuals/
                  - Name: suffix
                    Value: .parquet

  triggerContactsStateMachine:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python3.8
      CodeUri: triggerContactsStateMachine/
      Description: 'triggers the staging-contacts-state-machine'
      MemorySize: 128
      Timeout: 10
      Role: 'arn:aws:iam::815423538953:role/API-Lambda-Role'
      Events:
        BucketEvent1:
          Type: S3
          Properties:
            Bucket:
              Ref: Bucket
            Events:
              - 's3:ObjectCreated:*'
            Filter:
              S3Key:
                Rules:
                  - Name: prefix
                    Value: quasarpse/contact/
                  - Name: suffix
                    Value: .parquet

  triggerTimecardsStateMachine:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python3.8
      CodeUri: triggerTimecardsStateMachine/
      Description: ''
      MemorySize: 128
      Timeout: 10
      Role: 'arn:aws:iam::815423538953:role/API-Lambda-Role'
      Events:
        BucketEvent1:
          Type: S3
          Properties:
            Bucket:
              Ref: Bucket
            Events:
              - 's3:ObjectCreated:*'
            Filter:
              S3Key:
                Rules:
                  - Name: prefix
                    Value: quasarpse/timecard_c/
                  - Name: suffix
                    Value: .parquet

  triggerMissingTimecardsStateMachine:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python3.8
      CodeUri: triggerMissingTimecardsStateMachine/
      Description: ''
      MemorySize: 128
      Timeout: 10
      Role: 'arn:aws:iam::815423538953:role/API-Lambda-Role'
      Events:
        BucketEvent1:
          Type: S3
          Properties:
            Bucket:
              Ref: Bucket
            Events:
              - 's3:ObjectCreated:*'
            Filter:
              S3Key:
                Rules:
                  - Name: prefix
                    Value: quasarpse/missing_timecard/
                  - Name: suffix
                    Value: .parquet


  triggerCsatByResourceStateMachine:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python3.8
      CodeUri: triggerCsatByResourceStateMachine/
      Description: ''
      MemorySize: 128
      Timeout: 10
      Role: 'arn:aws:iam::815423538953:role/API-Lambda-Role'
      Events:
        BucketEvent1:
          Type: S3
          Properties:
            Bucket:
              Ref: Bucket
            Events:
              - 's3:ObjectCreated:*'
            Filter:
              S3Key:
                Rules:
                  - Name: prefix
                    Value: quasarpse/csat_by_resource/
                  - Name: suffix
                    Value: .parquet


  triggerCsatStateMachine:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python3.8
      CodeUri: triggerCsatStateMachine/
      Description: ''
      MemorySize: 128
      Timeout: 10
      Role: 'arn:aws:iam::815423538953:role/API-Lambda-Role'
      Events:
        BucketEvent1:
          Type: S3
          Properties:
            Bucket:
              Ref: Bucket
            Events:
              - 's3:ObjectCreated:*'
            Filter:
              S3Key:
                Rules:
                  - Name: prefix
                    Value: quasarpse/csat/
                  - Name: suffix
                    Value: .parquet

  triggerTfcStateMachine:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python3.8
      CodeUri: triggerTfcStateMachine/
      Description: ''
      MemorySize: 128
      Timeout: 10
      Role: 'arn:aws:iam::815423538953:role/API-Lambda-Role'
      Events:
        BucketEvent1:
          Type: S3
          Properties:
            Bucket:
              Ref: Bucket
            Events:
              - 's3:ObjectCreated:*'
            Filter:
              S3Key:
                Rules:
                  - Name: prefix
                    Value: manual_uploads/TFC/
                  - Name: suffix
                    Value: .csv

  triggerPulseStateMachine:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python3.8
      CodeUri: triggerPulseStateMachine/
      Description: ''
      MemorySize: 128
      Timeout: 10
      Role: 'arn:aws:iam::815423538953:role/API-Lambda-Role'
      Events:
        BucketEvent1:
          Type: S3
          Properties:
            Bucket:
              Ref: Bucket
            Events:
              - 's3:ObjectCreated:*'
            Filter:
              S3Key:
                Rules:
                  - Name: prefix
                    Value: manual_uploads/pulse/
                  - Name: suffix
                    Value: .csv

    
  checkTerminationProtection:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python3.8
      CodeUri: checkTerminationProtection/
      Description: ''
      MemorySize: 128
      Timeout: 10
      Role: 'arn:aws:iam::815423538953:role/service-role/LambdaConfigPermissions'