package pdf

import (
	"context"

	pdfpb "github.com/UpmeshLTD/urus-aio/pdf/server/grpc/pb"

	"github.com/UpmeshLTD/urus-aio/shipment/config"
	"github.com/UpmeshLTD/urus-aio/shipment/log"
	"google.golang.org/grpc"
	"google.golang.org/grpc/credentials/insecure"
)

type Service interface {
	Generate(ctx context.Context, req *pdfpb.GenerateRequest) (*pdfpb.GenerateResponse, error)
}

type serviceImpl struct {
	conn   *grpc.ClientConn
	client pdfpb.PdfServiceClient
	logger log.Logger
}

func NewService(cfg config.Config, logger log.Logger) (Service, error) {
	address := cfg.GetGRPCConfig().PdfAddress
	conn, err := grpc.Dial(address, grpc.WithTransportCredentials(insecure.NewCredentials()))
	if err != nil {
		logger.Errorw("initializing PDF client failed", "address", address, "error", err)
		return nil, err
	}

	client := pdfpb.NewPdfServiceClient(conn)
	return &serviceImpl{
		conn:   conn,
		client: client,
		logger: logger,
	}, nil
}

func (s *serviceImpl) Generate(ctx context.Context, req *pdfpb.GenerateRequest) (*pdfpb.GenerateResponse, error) {
	return s.client.Generate(ctx, req)
}
