package runtime

import (
        "bytes"
        "context"
        "io/ioutil"
        "net/http"
        "net/url"
)

type HTTP struct {
        URL *url.URL

        httpClient *http.Client
}

func (h *HTTP) Execute(ctx context.Context, req Request) (Response, error) {
        body := bytes.NewReader(req.Payload)
        r, err := http.NewRequest(http.MethodPost, h.URL.String(), body)
        if err != nil {
                return Response{}, err
        }

        r = r.WithContext(ctx)

        res, err := h.httpClient.Do(r)
        if err != nil {
                return Response{}, err
        }
        defer res.Body.Close()

        respBody, err := ioutil.ReadAll(res.Body)
        if err != nil {
                return Response{}, err
        }

        return Response{Payload: respBody}, nil
}