package client

import (
	"context"
	"errors"
	"net/http"

	"github.com/Azure/azure-sdk-for-go/sdk/azcore"
	updatev1alpha1 "github.com/edgelesssys/constellation/operators/constellation-node-operator/api/v1alpha1"
)

// GetNodeState returns the state of the node.
func (c *Client) GetNodeState(ctx context.Context, providerID string) (updatev1alpha1.CSPNodeState, error) {
	_, resourceGroup, scaleSet, instanceID, err := scaleSetInformationFromProviderID(providerID)
	if err != nil {
		return updatev1alpha1.NodeStateUnknown, err
	}
	instanceView, err := c.virtualMachineScaleSetVMsAPI.GetInstanceView(ctx, resourceGroup, scaleSet, instanceID, nil)
	if err != nil {
		var respErr *azcore.ResponseError
		if errors.As(err, &respErr) && respErr.StatusCode == http.StatusNotFound {
			return updatev1alpha1.NodeStateTerminated, nil
		}
		return updatev1alpha1.NodeStateUnknown, err
	}
	return nodeStateFromStatuses(instanceView.Statuses), nil
}