package matrixbot

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io"
	"net/http"
	"os"
)

type ReadReceiptRequest struct {
	FullyRead   string `json:"m.fully.read"`
	Read        string `json:"m.read"`
	ReadPrivate string `json:"m.read.private"`
}

func SetReadReceipt(token MatrixToken, roomId string, messageId string) error {
	body, err := json.Marshal(ReadReceiptRequest{
		FullyRead:   messageId,
		Read:        messageId,
		ReadPrivate: messageId,
	})
	if err != nil {
		return err
	}
	request, err := http.NewRequest(
		http.MethodPost,
		fmt.Sprintf("https://matrix-client.matrix.org/_matrix/client/v3/rooms/%s/read_markers", roomId),
		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 {
		_, _ = io.Copy(os.Stdout, response.Body)
		return fmt.Errorf("request failed %d: %s", response.StatusCode, response.Status)
	}
	return err
}