package main

import (
	"context"
	"flag"
	"fmt"
	"time"

	"github.com/pingcap-inc/labs.tidb.io/ssh-proxy/internal/config"
	"github.com/pingcap-inc/labs.tidb.io/ssh-proxy/internal/controlplane"
	"github.com/pingcap-inc/labs.tidb.io/ssh-proxy/internal/logger"
	server "github.com/pingcap-inc/labs.tidb.io/ssh-proxy/internal/web_console"
	"github.com/pingcap/log"
	"go.uber.org/zap"
)

func main() {
	var configPath string

	flag.StringVar(&configPath, "c", "./config.yaml", "the path of config file")
	flag.Parse()

	cfg, err := config.InitConfig(configPath)
	if err != nil {
		fmt.Println("failed to init config: ", err)
		return
	}

	logger.InitLogger(cfg.Log)

	if !cfg.Debug {
		// Register to lab control plane and start periodic reporter
		cpClient := controlplane.NewClient(cfg)
		ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
		defer cancel()
		if err := cpClient.Register(ctx); err != nil {
			log.Fatal("failed to register to control plane", zap.Error(err))
		}
		go cpClient.StartReporter(context.Background(), server.GetActiveWebConsoleSessions, 5*time.Second)
	}
	server.StartHttpServer(cfg)
}
