package api

import (
	"context"
	"github.com/loveuer/nfflow/internal/opt"
	"github.com/loveuer/nfflow/internal/util"
	"github.com/sirupsen/logrus"
	"net"
)

func MustStart(ctx context.Context) {

	app := initApp(ctx)
	ready := make(chan bool)

	ln, err := net.Listen("tcp", opt.Cfg.Address)
	if err != nil {
		logrus.Panicf("api.MustStart: net listen tcp address=%v err=%v", opt.Cfg.Address, err)
	}

	go func() {
		ready <- true

		if err = app.RunListener(ln); err != nil {
			logrus.Panicf("api.MustStart: app run err=%v", err)
		}
	}()

	<-ready

	go func() {
		ready <- true
		<-ctx.Done()
		if err = app.Shutdown(util.Timeout(1)); err != nil {
			logrus.Errorf("api.MustStart: app shutdown err=%v", err)
		}
	}()

	<-ready
}