package statemgr

import (
	"sync"

	"github.com/hashicorp/terraform/internal/states"
)

// NewTransientInMemory returns a Transient implementation that retains
// transient snapshots only in memory, as part of the object.
//
// The given initial state, if any, must not be modified concurrently while
// this function is running, but may be freely modified once this function
// returns without affecting the stored transient snapshot.
func NewTransientInMemory(initial *states.State) Transient {
	return &transientInMemory{
		current: initial.DeepCopy(),
	}
}

type transientInMemory struct {
	lock    sync.RWMutex
	current *states.State
}

var _ Transient = (*transientInMemory)(nil)

func (m *transientInMemory) State() *states.State {
	m.lock.RLock()
	defer m.lock.RUnlock()

	return m.current.DeepCopy()
}

func (m *transientInMemory) WriteState(new *states.State) error {
	m.lock.Lock()
	defer m.lock.Unlock()

	m.current = new.DeepCopy()
	return nil
}
