package main

import (
	"context"
	"flag"
	"log"
	"os"
	"time"

	"github.com/tidbcloud/metering/pkg/common/config"
	"github.com/tidbcloud/metering/pkg/httpapi"
	"github.com/tidbcloud/metering/pkg/schedule"
	"go.uber.org/zap"
)

var serviceconfigpath string

func main() {
	//load config
	flag.StringVar(&serviceconfigpath, "serviceconfig", "./configs/serviceconfig.yaml", "service info.")
	flag.Parse()
	apiGatewayAuthKey := os.Getenv("API_GATEWAY_AUTH_KEY")

	serviceConfig, err := config.LoadServiceConfig(serviceconfigpath)
	if err != nil {
		log.Panicf("load service config failed. %s", err.Error())
	}

	serviceConfig.Secret = &config.Secret{
		ApiGatewayKey: apiGatewayAuthKey,
	}

	var logger *zap.Logger
	if serviceConfig.LogLevel == "debug" {
		logger, _ = zap.NewDevelopment()
	} else {
		logger, _ = zap.NewProduction()
	}
	logger.Info("serviceconfig", zap.Any("serviceconfig", serviceConfig))
	scheduler := schedule.NewScheduler()
	//setup meter job
	meteringtask, err := schedule.NewNetWorkTask(&serviceConfig, logger)
	if err != nil {
		logger.Fatal("new metering task failed", zap.Error(err))
	}
	scheduler.AddJob(logger, time.Duration(serviceConfig.TrafficMeteringConfig.MeterInterval)*time.Minute, meteringtask)
	go scheduler.Run()
	//setup  http server
	httpapi.StartService(context.Background(), serviceConfig)
}
