package src

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

	"github.com/pkg/errors"
)

// PerformDelete does the actual delete via DELETE request.
func (c *Client) PerformDelete(url string) error {
	req, err := http.NewRequest("DELETE", url, nil)
	if err != nil {
		return err
	}

	//set access token and headers
	c.setRequestScope(req)

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

	//204 - resource deleted.
	//202 - folder not empty, content will be deleted soon (async delete).
	if resp.StatusCode != 204 && resp.StatusCode != 202 {
		body, err := ioutil.ReadAll(resp.Body)
		if err != nil {
			return err
		}
		return errors.Errorf("delete error [%d]: %s", resp.StatusCode, string(body[:]))
	}
	return nil
}