package matrixbot

import (
	"bytes"
	"encoding/json"
	"fmt"
	"github.com/google/uuid"
	"net/http"
)

func SendMessage(token MatrixToken, roomId string, content interface{}) error {
	transactionId, err := uuid.NewRandom()
	if err != nil {
		return err
	}
	body, err := json.Marshal(content)
	if err != nil {
		return err
	}
	request, err := http.NewRequest(
		http.MethodPut,
		fmt.Sprintf("https://matrix-client.matrix.org/_matrix/client/v3/rooms/%s/send/%s/%s",
			roomId,
			"m.room.message",
			transactionId.String(),
		),
		bytes.NewReader(body),
	)
	if err != nil {
		panic(err)
	}
	request.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token.AccessToken))
	response, err := http.DefaultClient.Do(request)
	if err != nil {
		return err
	}
	if response.StatusCode < 200 || response.StatusCode >= 300 {
		return fmt.Errorf("request failed %d: %s", response.StatusCode, response.Status)
	}
	return err
}