package controller

import (
	"context"
	"fmt"

	"github.com/sirupsen/logrus"

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

type Controller struct {
	w worker.Worker
}

func New(ctx context.Context, cfg *configs.Config) (*Controller, error) {
	logrus.Infof("Controller running in %s mode", cfg.Mode)

	var w worker.Worker
	var err error
	switch cfg.Mode {
	case configs.ModeMetric:
		w, err = worker.NewMetricWorker(ctx, cfg)
	case configs.ModeLog, configs.ModeDeltalake:
		w, err = worker.NewFileWorker(ctx, cfg)
	default:
		return nil, fmt.Errorf("unsupported mode: %s", cfg.Mode)
	}
	if err != nil {
		return nil, err
	}
	return &Controller{w: w}, nil
}

func (c *Controller) Run(ctx context.Context) error {
	return c.w.Run(ctx)
}

func (c *Controller) Close() error {
	return c.w.Close()
}
