package deletesvc

import (
	"context"

	"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
	"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
	"go.uber.org/zap"
)

func (exec *execCtx) executeLocal(ctx context.Context) {
	exec.log.Debug(logs.DeleteFormingTombstoneStructure)

	ok := exec.formTombstone(ctx)
	if !ok {
		return
	}

	exec.log.Debug(logs.DeleteTombstoneStructureSuccessfullyFormedSaving)

	exec.saveTombstone(ctx)
}

func (exec *execCtx) formTombstone(ctx context.Context) (ok bool) {
	tsLifetime, err := exec.svc.netInfo.TombstoneLifetime()
	if err != nil {
		exec.status = statusUndefined
		exec.err = err

		exec.log.Debug(logs.DeleteCouldNotReadTombstoneLifetimeConfig,
			zap.String("error", err.Error()),
		)

		return false
	}

	exec.tombstone = object.NewTombstone()
	exec.tombstone.SetExpirationEpoch(
		exec.svc.netInfo.CurrentEpoch() + tsLifetime,
	)
	exec.addMembers([]oid.ID{exec.address().Object()})

	exec.log.Debug(logs.DeleteFormingSplitInfo)

	ok = exec.formSplitInfo(ctx)
	if !ok {
		return
	}

	exec.log.Debug(logs.DeleteSplitInfoSuccessfullyFormedCollectingMembers)

	exec.tombstone.SetSplitID(exec.splitInfo.SplitID())

	ok = exec.collectMembers(ctx)
	if !ok {
		return
	}

	exec.log.Debug(logs.DeleteMembersSuccessfullyCollected)

	ok = exec.initTombstoneObject()
	if !ok {
		return
	}

	return true
}