package solver

import (
	"context"

	"github.com/moby/buildkit/session"
	"github.com/moby/buildkit/session/secrets"
	"github.com/moby/buildkit/session/secrets/secretsprovider"
	"github.com/rs/zerolog/log"
	"go.dagger.io/dagger/plancontext"
)

func NewSecretsStoreProvider(pctx *plancontext.Context) session.Attachable {
	return secretsprovider.NewSecretProvider(&inputStore{pctx})
}

type inputStore struct {
	pctx *plancontext.Context
}

func (s *inputStore) GetSecret(ctx context.Context, id string) ([]byte, error) {
	lg := log.Ctx(ctx)

	secret := s.pctx.Secrets.Get(plancontext.ContextKey(id))
	if secret == nil {
		return nil, secrets.ErrNotFound
	}

	lg.
		Debug().
		Str("id", id).
		Msg("injecting secret")

	return []byte(secret.PlainText), nil
}