package main

import (
	"github.com/spf13/viper"
	"github.com/tidbcloud/api-gateway/ddbtoredis"
	"github.com/tidbcloud/tiinf/monitor/tilog"
	"github.com/tidbcloud/tiinf/monitor/titracing"
	"go.uber.org/zap"
)

func main() {
	viper.SetConfigName("config")
	viper.SetConfigType("yaml")
	viper.AddConfigPath("/etc/ddbtoredis")
	err := viper.ReadInConfig()
	if err != nil {
		tilog.PlainFatal("read config failed", zap.Error(err))
	}

	_, err = titracing.InitJaeger("ddbtoredis")
	if err != nil {
		tilog.PlainFatal("create trace provider failed", zap.Error(err))
	}

	redisRw := ddbtoredis.NewRedisReaderWriter(
		viper.GetString("redis.address"),
		viper.GetString("redis.password"),
	)
	ddbReader, err := ddbtoredis.NewDynamodbReader(
		viper.GetString("dynamodb.region"),
		viper.GetString("dynamodb.tableName"),
		viper.GetString("dynamodb.assumeRole"),
	)
	if err != nil {
		tilog.PlainFatal("create dynamodb reader failed", zap.Error(err))
	}
	ddbStreamsSubscriber, err := ddbtoredis.NewDynamodbStreamsSubscriber(
		viper.GetString("dynamodb.region"),
		viper.GetString("dynamodb.tableName"),
		viper.GetString("dynamodb.assumeRole"),
	)
	if err != nil {
		tilog.PlainFatal("create dynamodb streams subscriber failed", zap.Error(err))
	}
	s, err := ddbtoredis.NewSyncer(redisRw, ddbReader, ddbStreamsSubscriber)
	if err != nil {
		tilog.PlainFatal("create syner failed", zap.Error(err))
	}
	s.Run()
}
