package backup

import (
	"fmt"
	"github.com/pkg/errors"
)

type Request struct {
	Adapter      string   `json:"adapter"`
	Uuid         string   `json:"uuid"`
	IgnoredFiles []string `json:"ignored_files"`
	PresignedUrl string   `json:"presigned_url"`
}

// Generates a new local backup struct.
func (r *Request) NewLocalBackup() (*LocalBackup, error) {
	if r.Adapter != LocalBackupAdapter {
		return nil, errors.New(fmt.Sprintf("cannot create local backup using [%s] adapter", r.Adapter))
	}

	return &LocalBackup{
		Backup{
			Uuid:         r.Uuid,
			IgnoredFiles: r.IgnoredFiles,
		},
	}, nil
}

// Generates a new S3 backup struct.
func (r *Request) NewS3Backup() (*S3Backup, error) {
	if r.Adapter != S3BackupAdapter {
		return nil, errors.New(fmt.Sprintf("cannot create s3 backup using [%s] adapter", r.Adapter))
	}

	if len(r.PresignedUrl) == 0 {
		return nil, errors.New("a valid presigned S3 upload URL must be provided to use the [s3] adapter")
	}

	return &S3Backup{
		Backup: Backup{
			Uuid:         r.Uuid,
			IgnoredFiles: r.IgnoredFiles,
		},
		PresignedUrl: r.PresignedUrl,
	}, nil
}