package opworker

import (
	"context"

	"github.com/tidbcloud/account/commons/database"
	"github.com/tidbcloud/account/commons/ddb"
	"github.com/tidbcloud/account/internel/dao"

	"go.opentelemetry.io/otel"

	"github.com/tidbcloud/account/central/utils"
	"github.com/tidbcloud/account/central/worker/dynamodbcheck"
	"github.com/tidbcloud/account/commons/config"
	"github.com/tidbcloud/tiinf/monitor/tilog"
	"go.uber.org/zap"
)

type DynamoDBDataValidationWorker struct{ GlobalWorker }

func (w DynamoDBDataValidationWorker) Run(c context.Context) error {
	ctx, span := otel.Tracer(config.TraceComponentNameWorker).Start(c, "DynamoDBDataValidationWorker")
	defer span.End()
	bm := utils.Begin(ctx, "DynamoDBDataValidationWorker")
	defer bm.OnExit(ctx)
	db := database.DBConn.DB
	ddbClient, err := ddb.NewDynamoDB(config.Global())
	if err != nil {
		return err
	}

	daoHub := dao.NewDaoHub()

	err = dynamodbcheck.RunApiKeyCheck(ctx, db, ddbClient, daoHub)
	if err != nil {
		tilog.Warn(ctx, "RunApiKeyCheck failed", zap.Error(err))
	}
	err = dynamodbcheck.RunPrivilegeRoleCheck(ctx, db, ddbClient, daoHub)
	if err != nil {
		tilog.Error(ctx, "RunPrivilegeRoleCheck failed", zap.Error(err))
	}

	return nil
}
