package alert_server

import (
	"github.com/pingcap-inc/security/internal/alert-server/config"
	option "github.com/pingcap-inc/security/internal/alert-server/option"

	"github.com/pingcap-inc/pchub/pkg/app"
	"github.com/pingcap-inc/pchub/pkg/log"
)

const commandDesc = `The Security Alert Server is the service to alert phishing/spam emails, host-port security issues.`

// NewApp contructs the app and return it.
func NewApp(bname string) *app.App {
	opts := option.NewOptions()
	application := app.NewApp("Security Alert Server",
		bname,
		app.WithOptions(opts),
		app.WithDescription(commandDesc),
		app.WithDefaultValidArgs(),
		app.WithRunFunc(run(opts)),
		app.WithLoggerInitFunc(loggerInit(opts)),
	)

	return application
}

func loggerInit(opts *option.Options) app.LoggerInitFunc {
	return func() {
		log.Init(opts.Log)
		defer log.Flush()
	}
}

func run(opts *option.Options) app.RunFunc {
	return func(bname string) error {
		cfg, err := config.CreateConfigFromOptions(opts)
		if err != nil {
			return err
		}

		return Run(cfg)
	}
}
