package api_server

import (
	"os"
	"time"

	"github.com/gin-gonic/gin"
	"github.com/rs/zerolog/log"
	"github.com/spf13/cobra"
	"gitlab.com/tensorsecurity-rd/waf-console/api"
	"gitlab.com/tensorsecurity-rd/waf-console/cmd/api-server/config"

	// "gitlab.com/tensorsecurity-rd/waf-console/cmd/config"

	"gitlab.com/tensorsecurity-rd/waf-console/internal/service"
	es "gitlab.com/tensorsecurity-rd/waf-console/internal/store"
)

func NewApiServer() *gin.Engine {
	router := gin.Default()
	return router
}

func NewRootCommand() *cobra.Command {
	return &cobra.Command{
		Use:   "api-server",
		Short: "Start api-server service.",
		Args:  cobra.ExactArgs(0),
		RunE: func(cmd *cobra.Command, args []string) error {
			config := config.LoadConfig()
			debugMode := os.Getenv("DEBUG_MODE")
			log.Info().Msgf("DEBUG_MODE: %s", debugMode)
			if debugMode == "true" {
				config.Debug = true
				// config.Conf.Debug = true
			}
			esClient, err := es.CreateEsClientFromConfig(config.ElasticsearchConfig)
			if err != nil {
				panic(err)
			}

			e := api.SetApiRouters(config, config.SSOUrl, esClient)
			esStore := es.NewESStore(es.Config{
				ESBatchSize:   100,
				ESConcurrency: 10,
				ESTimeout:     10 * time.Second,
			}, esClient)
			esStore.Init()
			logConsumerService := service.NewLogConsumerService(nil, esStore, config.KafkaConfig)
			go logConsumerService.Consume()
			return e.Run(":8080")
		},
	}
}
