package memory

import (
	"context"
	"time"

	"github.com/tidbcloud/AgentTeam/internal/service/resource/repos"
)

type MemoryRepositoryInitializeRequest struct {
	Repository  repos.RepositoryIdentity
	Locale      string
	Message     string
	AuthorName  string
	AuthorEmail string
}

type MemoryRepositoryInitializer interface {
	InitializeMemoryRepository(context.Context, MemoryRepositoryInitializeRequest) error
}

type MemoryRepositoryForkRequest struct {
	Source  repos.RepositoryIdentity
	Target  repos.RepositoryIdentity
	Message string
}

type MemoryRepositoryForker interface {
	ForkMemoryRepository(context.Context, MemoryRepositoryForkRequest) error
}

type MemoryRepositoryBackupListRequest struct {
	Repository repos.RepositoryIdentity
	Query      string
	Page       int
	PerPage    int
}

type MemoryRepositoryBackupCreateRequest struct {
	Repository  repos.RepositoryIdentity
	Branch      string
	Name        string
	Now         time.Time
	AuthorName  string
	AuthorEmail string
}

type MemoryRepositoryBackupRestoreRequest struct {
	Repository repos.RepositoryIdentity
	Branch     string
	TagName    string
	Now        time.Time
}

type MemoryRepositoryBackupRestoreResult struct {
	Restored     AgentCloudMemoryBackup
	BeforeBackup AgentCloudMemoryBackup
}

type MemoryRepositoryBackupStore interface {
	ListMemoryRepositoryBackups(context.Context, MemoryRepositoryBackupListRequest) (AgentCloudMemoryBackupPage, error)
	CreateMemoryRepositoryBackup(context.Context, MemoryRepositoryBackupCreateRequest) (AgentCloudMemoryBackup, error)
	RestoreMemoryRepositoryBackup(context.Context, MemoryRepositoryBackupRestoreRequest) (MemoryRepositoryBackupRestoreResult, error)
}
