package main

import (
	"bytes"
	"fmt"
	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/session"
	"github.com/aws/aws-sdk-go/service/s3"
	"github.com/aws/aws-sdk-go/service/s3/s3manager"
	"io"
	"log"
	"os"
	"time"
)

const (
	REGION = "ap-southeast-1"
	BUCKET = "poogky"
	FILE   = "../pdf/jnt.pdf"
	KEY    = "tmp/jnt.pdf"
)

func main() {
	sess, _ := session.NewSession(&aws.Config{
		Region: aws.String(REGION),
	})

	file, err := os.Open(FILE)
	if err != nil {
		log.Fatalln(err)
	}
	defer func(file *os.File) {
		if err := file.Close(); err != nil {
			log.Fatalln(err)
		}
	}(file)

	uploader := s3manager.NewUploader(sess)
	output, err := uploader.Upload(&s3manager.UploadInput{
		Bucket: aws.String(BUCKET),
		Key:    aws.String(KEY),
		ACL:    aws.String("private"),
		Body:   file,
	})

	fmt.Println(output, err)
}

func getPreSignedURL(bucket, objectKey string, ttl time.Duration) {
	sess, _ := session.NewSession(&aws.Config{
		Region: aws.String(REGION),
	})

	client := s3.New(sess)
	req, _ := client.GetObjectRequest(&s3.GetObjectInput{
		Bucket:                     aws.String(BUCKET),
		Key:                        aws.String(KEY),
		ResponseContentType:        aws.String("application/pdf"),
		ResponseContentDisposition: aws.String("inline"),
	})

	url, err := req.Presign(ttl)
	if err != nil {
		log.Fatalln(err)
	}

	fmt.Println(url)
}

func readFile(session *session.Session) {
	results, err := s3.New(session).GetObject(&s3.GetObjectInput{
		Bucket: aws.String(BUCKET),
		Key:    aws.String(KEY),
	})
	if err != nil {
		log.Fatalln(err)
	}
	defer func(Body io.ReadCloser) {
		if err := Body.Close(); err != nil {
			log.Fatalln(err)
		}
	}(results.Body)

	buf := bytes.NewBuffer(nil)
	if _, err := io.Copy(buf, results.Body); err != nil {
		log.Fatalln(err)
	}

	fmt.Println("File", string(buf.Bytes()))
}
