package pdf

import (
	"context"
	"io"
	"net/http"

	"github.com/starwalkn/gotenberg-go-client/v8"
	"github.com/starwalkn/gotenberg-go-client/v8/document"
)

type Service struct {
	gotenberg *gotenberg.Client
}

func New(hostname string) (service *Service, err error) {
	service = &Service{}
	service.gotenberg, err = gotenberg.NewClient(hostname, http.DefaultClient)
	return
}

func (s *Service) HtmlToPdf(html string) (pdf io.ReadCloser, err error) {
	index, err := document.FromString("index.html", html)
	if err != nil {
		return
	}
	req := gotenberg.NewHTMLRequest(index)
	req.PaperSize(gotenberg.A4)

	req.Margins(gotenberg.NoMargins)
	// Skips the IDLE events for faster PDF conversion.
	req.SkipNetworkIdleEvent(true)
	req.EmulatePrintMediaType()

	resp, err := s.gotenberg.Send(context.Background(), req)
	if err != nil {
		return
	}
	pdf = resp.Body

	return
}
