package pipeline

import (
	"context"

	"github.com/grafana/grafana-plugin-sdk-go/data"
)

type DropFieldsProcessorConfig struct {
	FieldNames []string `json:"fieldNames"`
}

// DropFieldsProcessor can drop specified fields from a data.Frame.
type DropFieldsProcessor struct {
	config DropFieldsProcessorConfig
}

func removeIndex(s []*data.Field, index int) []*data.Field {
	return append(s[:index], s[index+1:]...)
}

func NewDropFieldsProcessor(config DropFieldsProcessorConfig) *DropFieldsProcessor {
	return &DropFieldsProcessor{config: config}
}

func (d DropFieldsProcessor) Process(_ context.Context, _ ProcessorVars, frame *data.Frame) (*data.Frame, error) {
	for _, f := range d.config.FieldNames {
	inner:
		for i, field := range frame.Fields {
			if f == field.Name {
				frame.Fields = removeIndex(frame.Fields, i)
				continue inner
			}
		}
	}
	return frame, nil
}
