package docker

import (
	"github.com/portainer/portainer/api"
)

// Snapshotter represents a service used to create endpoint snapshots
type Snapshotter struct {
	clientFactory *ClientFactory
}

// NewSnapshotter returns a new Snapshotter instance
func NewSnapshotter(clientFactory *ClientFactory) *Snapshotter {
	return &Snapshotter{
		clientFactory: clientFactory,
	}
}

// CreateSnapshot creates a snapshot of a specific endpoint
func (snapshotter *Snapshotter) CreateSnapshot(endpoint *portainer.Endpoint) (*portainer.Snapshot, error) {
	cli, err := snapshotter.clientFactory.CreateClient(endpoint, "")
	if err != nil {
		return nil, err
	}
	defer cli.Close()

	return snapshot(cli, endpoint)
}