package notifications

import (
	"bytes"
	"context"
	"log"
	"strings"
	"testing"

	"github.com/gofrs/uuid/v5"
	"github.com/saveinmed/backend-go/internal/domain"
)

func TestLoggerNotificationService(t *testing.T) {
	buffer := &bytes.Buffer{}
	original := log.Writer()
	log.SetOutput(buffer)
	defer log.SetOutput(original)

	svc := NewLoggerNotificationService()
	ctx := context.Background()
	order := &domain.Order{ID: uuid.Must(uuid.NewV7()), TotalCents: 12345, Status: domain.OrderStatusPaid}
	buyer := &domain.User{Email: "buyer@example.com", Name: "Buyer"}
	seller := &domain.User{Email: "seller@example.com", Name: "Seller"}

	if err := svc.NotifyOrderCreated(ctx, order, buyer, seller); err != nil {
		t.Fatalf("unexpected error: %v", err)
	}
	if err := svc.NotifyOrderStatusChanged(ctx, order, buyer); err != nil {
		t.Fatalf("unexpected error: %v", err)
	}

	output := buffer.String()
	if !strings.Contains(output, "Novo Pedido") {
		t.Fatalf("expected output to include order created log, got %q", output)
	}
	if !strings.Contains(output, "Atualização do Pedido") {
		t.Fatalf("expected output to include status change log, got %q", output)
	}
}
