// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0

package terraform

import (
	"log"

	"github.com/hashicorp/terraform/internal/configs"
	"github.com/hashicorp/terraform/internal/plans"
	"github.com/hashicorp/terraform/internal/states"
	"github.com/hashicorp/terraform/internal/tfdiags"
)

// Refresh is a vestigial operation that is equivalent to call to Plan and
// then taking the prior state of the resulting plan.
//
// We retain this only as a measure of semi-backward-compatibility for
// automation relying on the "terraform refresh" subcommand. The modern way
// to get this effect is to create and then apply a plan in the refresh-only
// mode.
func (c *Context) Refresh(config *configs.Config, prevRunState *states.State, opts *PlanOpts) (*states.State, tfdiags.Diagnostics) {
	if opts == nil {
		// This fallback is only here for tests, not for real code.
		opts = &PlanOpts{
			Mode: plans.NormalMode,
		}
	}
	if opts.Mode != plans.NormalMode {
		panic("can only Refresh in the normal planning mode")
	}

	log.Printf("[DEBUG] Refresh is really just plan now, so creating a %s plan", opts.Mode)
	p, diags := c.Plan(config, prevRunState, opts)
	if diags.HasErrors() {
		return nil, diags
	}

	return p.PriorState, diags
}
