package file

import (
	"time"

	"github.com/aws/amazon-ssm-agent/agent/context"
	"github.com/aws/amazon-ssm-agent/agent/plugins/inventory/model"
)

const (
	// GathererName captures name of file gatherer
	GathererName = "AWS:File"
	// SchemaVersionOfFileGatherer represents schema version of file gatherer
	SchemaVersionOfFileGatherer = "1.0"
)

type T struct{}

// Gatherer returns new file gatherer
func Gatherer(context context.T) *T {
	return new(T)
}

var collectData = collectFileData

// Name returns name of file gatherer
func (t *T) Name() string {
	return GathererName
}

// Run executes file gatherer and returns list of inventory.Item comprising of file data
func (t *T) Run(context context.T, configuration model.Config) (items []model.Item, err error) {

	var result model.Item

	//CaptureTime must comply with format: 2016-07-30T18:15:37Z to comply with regex at SSM.
	currentTime := time.Now().UTC()
	captureTime := currentTime.Format(time.RFC3339)
	var data []model.FileData
	data, err = collectData(context, configuration)

	result = model.Item{
		Name:          t.Name(),
		SchemaVersion: SchemaVersionOfFileGatherer,
		Content:       data,
		CaptureTime:   captureTime,
	}

	items = append(items, result)
	return
}

// RequestStop stops the execution of application gatherer.
func (t *T) RequestStop() error {
	return nil
}