// Copyright (C) The Arvados Authors. All rights reserved.
//
// SPDX-License-Identifier: Apache-2.0

package httpserver

import (
	"encoding/json"
	"fmt"
	"net/http"
)

func Errorf(status int, tmpl string, args ...interface{}) error {
	return errorWithStatus{fmt.Errorf(tmpl, args...), status}
}

func ErrorWithStatus(err error, status int) error {
	return errorWithStatus{err, status}
}

type errorWithStatus struct {
	error
	Status int
}

func (ews errorWithStatus) HTTPStatus() int {
	return ews.Status
}

type ErrorResponse struct {
	Errors []string `json:"errors"`
}

func Error(w http.ResponseWriter, error string, code int) {
	Errors(w, []string{error}, code)
}

func Errors(w http.ResponseWriter, errors []string, code int) {
	w.Header().Set("Content-Type", "application/json")
	w.Header().Set("X-Content-Type-Options", "nosniff")
	w.WriteHeader(code)
	json.NewEncoder(w).Encode(ErrorResponse{Errors: errors})
}