package secretstore

import (
	"context"

	"go.uber.org/dig"
	"google.golang.org/grpc"

	api "github.com/tidbcloud/aisupport/packages/sdk-go/contracts/api/agent-sidecar/secretstore/v1"
	"github.com/tidbcloud/aisupport/packages/sdk-go/infra/rpcserver"
	"github.com/tidbcloud/aisupport/services/agent-sidecar/internal/app"
	serviceapi "github.com/tidbcloud/aisupport/services/agent-sidecar/internal/services/secretstore/api"
)

type HandlerParam struct {
	dig.In

	Service serviceapi.Store
}

type Handler struct {
	api.UnimplementedSecretStoreServiceServer

	service serviceapi.Store
}

func NewHandler(param HandlerParam) app.HandlerResult {
	return app.HandlerResult{Handler: &Handler{service: param.Service}}
}

func (h *Handler) Name() string { return "SecretStoreService" }

func (h *Handler) RegisterRPC(server *grpc.Server) error {
	api.RegisterSecretStoreServiceServer(server, h)
	return nil
}

func (h *Handler) ListSecrets(ctx context.Context, _ *api.ListSecretsRequest) (*api.ListSecretsResponse, error) {
	return &api.ListSecretsResponse{Secrets: h.service.ListSecrets(ctx)}, nil
}

var _ api.SecretStoreServiceServer = (*Handler)(nil)
var _ rpcserver.RPCHandler = (*Handler)(nil)
