package exporter

import (
	"context"
	"path/filepath"

	"github.com/FAU-CDI/wisski-distillery/internal/dis/component"
)

// Config implements backing up configuration
type Config struct {
	component.Base
}

var (
	_ = (component.Backupable)((*Config)(nil))
)

func (*Config) BackupName() string {
	return "config"
}

func (control *Config) Backup(scontext component.StagingContext) error {
	files := control.backupFiles()

	return scontext.AddDirectory("", func(ctx context.Context) error {
		for _, src := range files {
			name := filepath.Base(src)
			if err := scontext.CopyFile(name, src); err != nil {
				return err
			}
		}
		return nil
	})
}

// backupfiles lists the files to be backed up.
func (control *Config) backupFiles() []string {
	return []string{
		control.Config.ConfigPath,
		control.Config.ExecutablePath(),
		control.Config.SelfOverridesFile,
		control.Config.SelfResolverBlockFile,
		control.Config.GlobalAuthorizedKeysFile,
	}
}
