package conf

import "github.com/xtls/xray-core/common/errors"

type ConfigureFilePostProcessingStage interface {
	Process(conf *Config) error
}

var configureFilePostProcessingStages map[string]ConfigureFilePostProcessingStage

func RegisterConfigureFilePostProcessingStage(name string, stage ConfigureFilePostProcessingStage) {
	if configureFilePostProcessingStages == nil {
		configureFilePostProcessingStages = make(map[string]ConfigureFilePostProcessingStage)
	}
	configureFilePostProcessingStages[name] = stage
}

func PostProcessConfigureFile(conf *Config) error {
	for k, v := range configureFilePostProcessingStages {
		if err := v.Process(conf); err != nil {
			return errors.New("Rejected by Postprocessing Stage ", k).AtError().Base(err)
		}
	}
	return nil
}