package httputil

import (
	"io"

	"github.com/diamondburned/arikawa/v3/utils/httputil/httpdriver"
)

// This file contains mistakes.

// httpResponse wraps around a httpdriver.Response to provide a custom body.
type httpResponse struct {
	httpdriver.Response
	body io.ReadCloser
}

func wrapCancelableResponse(r httpdriver.Response, cancel func()) httpdriver.Response {
	body := bodyCloser{
		ReadCloser: r.GetBody(),
		close:      cancel,
	}
	return httpResponse{
		Response: r,
		body:     body,
	}
}

func (resp httpResponse) GetBody() io.ReadCloser {
	return resp.body
}

// bodyCloser wraps around a body to add an additional close callback.
type bodyCloser struct {
	io.ReadCloser
	close func()
}

func (body bodyCloser) Close() error {
	err := body.ReadCloser.Close()
	body.close()
	return err
}