// Copyright IBM Corp. 2014, 2026
// SPDX-License-Identifier: BUSL-1.1

package convert

import (
	"github.com/hashicorp/terraform/internal/providers"
	proto "github.com/hashicorp/terraform/internal/tfplugin5"
)

// ProtoToDeferred translates a proto.Deferred to a providers.Deferred.
func ProtoToDeferred(d *proto.Deferred) *providers.Deferred {
	if d == nil {
		return nil
	}

	var reason providers.DeferredReason
	switch d.Reason {
	case proto.Deferred_UNKNOWN:
		reason = providers.DeferredReasonInvalid
	case proto.Deferred_RESOURCE_CONFIG_UNKNOWN:
		reason = providers.DeferredReasonResourceConfigUnknown
	case proto.Deferred_PROVIDER_CONFIG_UNKNOWN:
		reason = providers.DeferredReasonProviderConfigUnknown
	case proto.Deferred_ABSENT_PREREQ:
		reason = providers.DeferredReasonAbsentPrereq
	default:
		reason = providers.DeferredReasonInvalid
	}

	return &providers.Deferred{
		Reason: reason,
	}
}

// DeferredToProto translates a providers.Deferred to a proto.Deferred.
func DeferredToProto(d *providers.Deferred) *proto.Deferred {
	if d == nil {
		return nil
	}

	var reason proto.Deferred_Reason
	switch d.Reason {
	case providers.DeferredReasonInvalid:
		reason = proto.Deferred_UNKNOWN
	case providers.DeferredReasonResourceConfigUnknown:
		reason = proto.Deferred_RESOURCE_CONFIG_UNKNOWN
	case providers.DeferredReasonProviderConfigUnknown:
		reason = proto.Deferred_PROVIDER_CONFIG_UNKNOWN
	case providers.DeferredReasonAbsentPrereq:
		reason = proto.Deferred_ABSENT_PREREQ
	default:
		reason = proto.Deferred_UNKNOWN
	}

	return &proto.Deferred{
		Reason: reason,
	}
}
