package main

import (
	"context"
	"flag"

	"github.com/guo-shaoge/tiflash-autoscale/pkg/core"
)

func main() {
	configFile := flag.String("newconfig", "", "config file for autoscaler(YAML)")
	parseOldArgs()

	flag.Parse()

	if len(*configFile) == 0 {
		panic("config file cannot be empty, use --config to specify config file")
	}

	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()

	clusterMgr := core.NewClusterMgr(ctx, *configFile)
	if clusterMgr == nil {
		panic("create clusterMgr failed")
	}

	clusterMgr.Start()

	clusterMgr.Wait()
}

func parseOldArgs() {
	PrewarmPoolCap := 1
	DefaultMinCntOfPod := 1
	DefaultMaxCntOfPod := 1
	DefaultCoreOfPod := 1
	EnableMemScale := false
	PodGcWaitSec := 1
	DefaultLowerLimit := 1.0
	DefaultUpperLimit := 1.0
	MetricResolutionSeconds := 1
	DefaultAutoPauseIntervalSeconds := 1
	DefaultScaleIntervalSeconds := 1
	HardCodeMaxScaleIntervalSecOfCfg := 1
	ReadNodeLogUploadS3Bucket := ""
	YamlFilePath := ""
	UseSpecialTenantAsFixPool := false
	// TODO delete this after new version is stable, to make compatible with old version.
	flag.IntVar(&PrewarmPoolCap, "warm-pool-cap", PrewarmPoolCap, "PrewarmPoolCap")
	flag.IntVar(&DefaultMinCntOfPod, "default-min-pods", DefaultMinCntOfPod, "DefaultMinCntOfPod")
	flag.IntVar(&DefaultMaxCntOfPod, "default-max-pods", DefaultMaxCntOfPod, "DefaultMaxCntOfPod")
	flag.IntVar(&DefaultCoreOfPod, "default-cores-of-pods", DefaultCoreOfPod, "DefaultCoreOfPod")
	flag.BoolVar(&EnableMemScale, "enable-mem-scale", EnableMemScale, "EnableMemScale")
	flag.IntVar(&PodGcWaitSec, "pod-gc-wait-sec", PodGcWaitSec, "PodGcWaitSec")
	flag.Float64Var(&DefaultLowerLimit, "default-lowerlimit", DefaultLowerLimit, "DefaultLowerLimit")
	flag.Float64Var(&DefaultUpperLimit, "default-upperlimit", DefaultUpperLimit, "DefaultUpperLimit")
	flag.IntVar(&MetricResolutionSeconds, "metric-resolution-sec", MetricResolutionSeconds, "MetricResolutionSeconds")
	flag.IntVar(&DefaultAutoPauseIntervalSeconds, "default-autopause-intervalsec", DefaultAutoPauseIntervalSeconds, "DefaultAutoPauseIntervalSeconds")
	flag.IntVar(&DefaultScaleIntervalSeconds, "default-autoscale-intervalsec", DefaultScaleIntervalSeconds, "DefaultScaleIntervalSeconds")
	flag.IntVar(&HardCodeMaxScaleIntervalSecOfCfg, "maxscale-intervalsec-of-cfg", HardCodeMaxScaleIntervalSecOfCfg, "HardCodeMaxScaleIntervalSecOfCfg")
	flag.StringVar(&ReadNodeLogUploadS3Bucket, "s3-bucket-for-readnode-log", ReadNodeLogUploadS3Bucket, "ReadNodeUpdateS3Bucket")
	flag.StringVar(&YamlFilePath, "config", "", "path of config file")
	flag.BoolVar(&UseSpecialTenantAsFixPool, "use-special-tenant-as-fixpool", UseSpecialTenantAsFixPool, "UseSpecialTenantAsFixPool")
}
