package detect_cloud

import (
	"context"
	"net/http"
)

func detectOracle(ctx context.Context) string {
	v1ResultChan := make(chan bool, 1)
	v2ResultChan := make(chan bool, 1)

	go func() {
		v1ResultChan <- detectOracleIDMSv1(ctx)
	}()

	go func() {
		v2ResultChan <- detectOracleIDMSv2(ctx)
	}()

	v1Result, v2Result := <-v1ResultChan, <-v2ResultChan

	if v1Result || v2Result {
		return "Oracle"
	}
	return ""
}

func detectOracleIDMSv1(ctx context.Context) bool {
	req, err := http.NewRequestWithContext(ctx, "GET", "http://169.254.169.254/opc/v1/instance/", nil)
	if err != nil {
		return false
	}
	req.Header.Add("Authorization", "Bearer Oracle")

	resp, err := hc.Do(req)
	if err != nil {
		return false
	}
	defer resp.Body.Close()
	return resp.StatusCode == http.StatusOK
}

func detectOracleIDMSv2(ctx context.Context) bool {
	req, err := http.NewRequestWithContext(ctx, "GET", "http://169.254.169.254/opc/v2/instance/", nil)
	if err != nil {
		return false
	}
	req.Header.Add("Authorization", "Bearer Oracle")

	resp, err := hc.Do(req)
	if err != nil {
		return false
	}
	defer resp.Body.Close()
	return resp.StatusCode == http.StatusOK
}