package main

import (
	"context"
	"log"
	"net"
	"os"
	"os/signal"
	"strconv"
	"syscall"

	server "git.slaventius.ru/test3k/authPostman/internal"
	"git.slaventius.ru/test3k/authPostman/internal/config"
)

func main() {
	config := config.NewConfig()
	ctx, ctxCancel := context.WithCancel(context.Background())
	srv := server.NewServer(ctx, config)

	//
	signalChannel := make(chan os.Signal, 1)
	signal.Notify(signalChannel, syscall.SIGINT)
	signal.Notify(signalChannel, syscall.SIGTERM)
	defer stop(signalChannel, srv, ctxCancel)

	// Запуск сервера
	go start(config, srv, ctxCancel)

	//
	for {
		select {
		case <-signalChannel:
			return
		case <-ctx.Done():
			return
		}
	}
}

// Остановка сервера
func stop(signalChannel chan os.Signal, srv *server.AuthPostmanServer, cancel context.CancelFunc) {
	defer srv.GracefulStop()
	defer signal.Stop(signalChannel)
	defer cancel()

	log.Println("authPostmanServer stopping ...")
}

// Запуск сервера
func start(config *config.Config, srv *server.AuthPostmanServer, cancel context.CancelFunc) {
	defer cancel()

	//
	kafkaStr := net.JoinHostPort(config.Kafka.Host, strconv.Itoa(config.Kafka.Port))

	//
	log.Printf("authPostmanServer starting\n")
	log.Printf("authPostmanServer listening on %s\n", kafkaStr)

	// Запускаем прослушивание
	if err := srv.ReadMessage(0); err != nil {
		log.Fatal(err)
	}
}