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

package main

import (
	"context"
	"dynamodb-local-test/pkg/api"
	"dynamodb-local-test/pkg/model"
	"dynamodb-local-test/pkg/service"
	"dynamodb-local-test/pkg/utils"
	"fmt"
	"log"
	"os"

	"github.com/aws/aws-sdk-go-v2/aws"
	"github.com/aws/aws-sdk-go-v2/config"
	"github.com/aws/aws-sdk-go-v2/service/dynamodb"
	"github.com/gin-gonic/gin"
)

var awsCfg aws.Config
var ctx = context.TODO()

func main() {
	fmt.Println("Starting Server")

	post := model.Post{}
	post.Id = "1"
	post.Title = "my post"
	post.Content = "post content"
	post.Status = "posted"
	post.CreateTimestamp = utils.GetLocalTimestampNow()
	post.LastUpdateTimestamp = utils.GetLocalTimestampNow()

	awsProfile, ok := os.LookupEnv("AWS_PROFILE")
	log.Printf("AWS_PROFILE: %s", awsProfile)
	var err error
	var ps service.PostService

	if ok {
		log.Printf("Use AWS profile")
		awsCfg, err = config.LoadDefaultConfig(ctx,
			config.WithSharedConfigProfile(awsProfile),
		)
		if err != nil {
			log.Fatalf("Error loading profile %v", err)
		}

	} else {
		log.Printf("Use default role")
		awsCfg, err = config.LoadDefaultConfig(ctx)
	}

	ddbSvc := dynamodb.NewFromConfig(awsCfg)
	log.Printf("DDB service created")

	ps, _ = service.NewDdbPostService(ddbSvc)

	postServiceHandlers := api.PostServiceApi{PostService: ps}

	router := gin.Default()

	router.GET("/health", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "OK",
		})
	})

	router.GET("/post/:id", postServiceHandlers.PostServiceGetApi)

	router.POST("/post", postServiceHandlers.PostServiceAddApi)

	_ = router.Run(":80")

}