package ddb

import (
	"context"
	"sync"

	"github.com/aws/aws-sdk-go-v2/aws"
	awsConfig "github.com/aws/aws-sdk-go-v2/config"
	"github.com/aws/aws-sdk-go-v2/service/dynamodb"
	"github.com/tidbcloud/account/commons/config"
	ddbDao "github.com/tidbcloud/account/internel/dao/ddb"
)

var (
	dynamodbInitOnce sync.Once
	_dynamodbClient  *ddbDao.DynamoDBClient
)

func NewDynamoDB(centralConfig *config.CentralConfig) (*ddbDao.DynamoDBClient, error) {
	var err error
	var cfg aws.Config
	dynamodbInitOnce.Do(func() {
		cfg, err = awsConfig.LoadDefaultConfig(
			context.Background(),
			awsConfig.WithRegion(centralConfig.DynamodbConfig.Region),
		)
		if err != nil {
			return
		}
		_dynamodbClient = ddbDao.NewDynamoDBClient(
			dynamodb.NewFromConfig(cfg),
			centralConfig.DynamodbConfig.ApiKeyTableName,
			centralConfig.DynamodbConfig.PrivilegeRoleTableName,
			centralConfig.DynamodbConfig.PrivilegeRoleGSIName,
			centralConfig.DynamodbConfig.DisableWrite,
		)
	})

	if err != nil {
		return nil, err
	}
	return _dynamodbClient, err
}
