package checker

import (
	"context"

	"github.com/samber/lo"
	"github.com/tidbcloud/tiinf/monitor/tilog"
	"go.uber.org/zap"
	"google.golang.org/grpc"

	"github.com/tidbcloud/tidb-management-service/tidb-mgmt-service/pkg/apimiddleware/bizerror"
	"github.com/tidbcloud/tidb-management-service/utilities/grpc/metadata"
)

// DefaultPermissionCheckerFunc is the default permission checker function.
// It only extracts request meta. No actual permission check is performed.
func DefaultPermissionCheckerFunc(
	ctx context.Context,
	_ *CheckContext,
	req any,
	info *grpc.UnaryServerInfo,
) (context.Context, any, error) {
	// check if the user has the permission to access the resource
	// Extract request meta.
	reqMeta, err := metadata.ExtractRequestMeta(ctx)
	if err != nil {
		tilog.Error(ctx, "failed to extract request metadata", zap.Error(err))
		return ctx, req, bizerror.NewInternal(err, "failed to extract request metadata")
	}

	// set request meta
	reqMeta.IsCheckPermission = lo.ToPtr(true)
	tilog.Info(ctx, "no need to check permission for the method", zap.String("method", info.FullMethod))
	return metadata.AppendToIncomingMeta(ctx, reqMeta), req, nil
}
