package webui_context

import (
	"net/http"

	"github.com/free5gc/openapi/Nnrf_NFDiscovery"
	"github.com/free5gc/openapi/models"
	"github.com/free5gc/webconsole/backend/logger"
)

type NfInstance struct {
	ValidityPeriod int                `json:"validityPeriod"`
	NfInstances    []models.NfProfile `json:"nfInstances"`
}

func SendSearchNFInstances(targetNfType models.NfType) ([]models.NfProfile, error) {
	var nfProfiles []models.NfProfile

	ctx, _, err := GetSelf().GetTokenCtx(models.ServiceName_NNRF_DISC, models.NfType_NRF)
	if err != nil {
		logger.ConsumerLog.Errorln(err.Error())
		return nfProfiles, err
	}

	client := GetSelf().NFDiscoveryClient
	localVarOptionals := Nnrf_NFDiscovery.SearchNFInstancesParamOpts{}

	result, res, err := client.
		NFInstancesStoreApi.SearchNFInstances(ctx, targetNfType, models.NfType_AF, &localVarOptionals)
	if err != nil {
		logger.ConsumerLog.Errorf("SearchNFInstances failed: %+v", err)
	}
	defer func() {
		if res != nil {
			if resCloseErr := res.Body.Close(); resCloseErr != nil {
				logger.ConsumerLog.Errorf("NFInstancesStoreApi response body cannot close: %+v", resCloseErr)
			}
		}
	}()

	if res != nil && res.StatusCode == http.StatusTemporaryRedirect {
		logger.ConsumerLog.Errorln("Temporary Redirect For Non NRF Consumer")
		return nfProfiles, err
	}
	nfProfiles = result.NfInstances

	return nfProfiles, nil
}