package com.creactiviti.piper.taskhandler.s3;

import java.nio.file.Paths;

import org.springframework.stereotype.Component;

import com.creactiviti.piper.core.task.TaskExecution;
import com.creactiviti.piper.core.task.TaskHandler;

import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.ObjectCannedACL;
import software.amazon.awssdk.services.s3.model.PutObjectRequest;

/**
 * Adds an object to a bucket. Piper must have WRITE permissions on a bucket to add an object to it.
 * 
 * @author Arik Cohen
 * @since Feb, 19 2020
 */
@Component("s3/putObject")
class S3PutObject implements TaskHandler<Object> {

  @Override
  public Object handle (TaskExecution aTask) throws Exception {
    
    AmazonS3URI s3Uri = new AmazonS3URI(aTask.getRequiredString("uri"));
    
    String bucketName = s3Uri.getBucket();
    String key = s3Uri.getKey();
    
    S3Client s3 = S3Client.builder().build();
    
    s3.putObject(PutObjectRequest.builder()
                                 .bucket(bucketName)
                                 .key(key)
                                 .acl(aTask.getString("acl")!=null?ObjectCannedACL.fromValue(aTask.getString("acl")):null)
                                 .build(), Paths.get(aTask.getRequiredString("filepath")));
    
    return null;
  }

}