package alerting

import (
	"bytes"
	"encoding/json"
	"fmt"
	"github.com/TwinProduction/gatus/client"
	"io/ioutil"
)

type requestBody struct {
	Text string `json:"text"`
}

// SendSlackMessage sends a message to the given Slack webhook
func SendSlackMessage(webhookUrl, service, description string) error {
	body, _ := json.Marshal(requestBody{Text: fmt.Sprintf("*[Gatus]*\n*service:* %s\n*description:* %s", service, description)})
	response, err := client.GetHttpClient().Post(webhookUrl, "application/json", bytes.NewBuffer(body))
	if err != nil {
		return err
	}
	defer response.Body.Close()
	output, err := ioutil.ReadAll(response.Body)
	if err != nil {
		return fmt.Errorf("unable to read response body: %v", err.Error())
	}
	if string(output) != "ok" {
		return fmt.Errorf("error: %s", string(output))
	}
	return nil
}