package main

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

	"github.com/sirupsen/logrus"

	"github.com/tidbcloud/observability/backup-worker/pkg/configs"
	"github.com/tidbcloud/observability/backup-worker/pkg/controller"
)

var (
	buildTime string
	buildHash string
	gitBranch string
)

func main() {
	configPath := flag.String("config", "", "config file path (required)")
	version := flag.Bool("version", false, "show version information")
	flag.Parse()

	if *version {
		fmt.Println("BuildTime:", buildTime)
		fmt.Println("BuildHash:", buildHash)
		fmt.Println("GitBranch:", gitBranch)
		return
	}

	if *configPath == "" {
		fmt.Println("Error: -config flag is required")
		os.Exit(1)
	}

	logrus.SetFormatter(&logrus.TextFormatter{
		FullTimestamp:   true,
		TimestampFormat: time.RFC3339,
	})
	cfg, err := configs.Load(*configPath)
	if err != nil {
		logrus.Fatalf("Failed to load config: %v", err)
	}
	logrus.Infof("Load config successfully, taskID=%s, mode=%s", cfg.ID(), cfg.Mode)

	start := time.Now()
	ctx := context.Background()
	ctr, err := controller.New(ctx, cfg)
	if err != nil {
		logrus.Fatalf("Failed to create controller: %v", err)
	}
	defer ctr.Close()

	if err := ctr.Run(ctx); err != nil {
		logrus.Fatalf("Backup failed: %v", err)
	}
	logrus.Infof("Backup completed successfully, take=%s", time.Since(start))
}
