package nucleus

import (
	pb "code.fbi.h-da.de/cocsn/gosdn/cliInterface"
	"context"
	"google.golang.org/grpc"
	"log"
	"net"
)

// server is used to implement helloworld.GreeterServer.
type server struct {
	pb.UnimplementedGreeterServer
	core *Core
}

// SayHello implements helloworld.GreeterServer
func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
	log.Printf("Received: %v", in.GetName())
	return &pb.HelloReply{Message: "Hello " + in.GetName()}, nil
}

func (s *server) Shutdown(ctx context.Context, in *pb.ShutdownRequest) (*pb.ShutdownReply, error) {
	log.Printf("Received: %v", in.GetName())
	isRunning = false
	return &pb.ShutdownReply{Message: "Shutdown " + in.GetName()}, nil
}

func getCLIGoing(core *Core) {
	log.Println("Starting: GetCLIGoing")
	// Boot-up the control interface for the cli
	cliControlListener, err := net.Listen("tcp", core.config.CliSocket)
	if err != nil {
		log.Fatalf("failed to listen: %v", err)
	}

	cliControlServer := grpc.NewServer()

	pb.RegisterGreeterServer(cliControlServer, &server{core: core})
	if err := cliControlServer.Serve(cliControlListener); err != nil {
		log.Fatalf("failed to serve: %v", err)
	}
	log.Println("Started: GetCLIGoing")
}