package src

//from yadisk

import (
	"io"
	"io/ioutil"
	"net/http"

	"github.com/pkg/errors"
)

// PerformUpload does the actual upload via unscoped PUT request.
func (c *Client) PerformUpload(url string, data io.Reader, contentType string) (err error) {
	req, err := http.NewRequest("PUT", url, data)
	if err != nil {
		return err
	}
	req.Header.Set("Content-Type", contentType)

	//c.setRequestScope(req)

	resp, err := c.HTTPClient.Do(req)
	if err != nil {
		return err
	}
	defer CheckClose(resp.Body, &err)

	if resp.StatusCode != 201 {
		body, err := ioutil.ReadAll(resp.Body)
		if err != nil {
			return err
		}

		return errors.Errorf("upload error [%d]: %s", resp.StatusCode, string(body[:]))
	}
	return nil
}
