package app

import (
	"testing"

	"google.golang.org/protobuf/proto"
	roomeventsv1 "hyapp.local/api/proto/events/room/v1"
	"hyapp/pkg/roommq"
)

func TestRoomGiftCPEventFromRoomMessageIncludesNormalGift(t *testing.T) {
	body, err := proto.Marshal(&roomeventsv1.RoomGiftSent{
		SenderUserId:     1001,
		TargetUserId:     1002,
		GiftId:           "rose",
		GiftCount:        1,
		GiftValue:        100,
		BillingReceiptId: "receipt-normal",
		CommandId:        "cmd-normal",
		GiftTypeCode:     "normal",
		GiftName:         "Rose",
		RoomLocked:       true,
	})
	if err != nil {
		t.Fatalf("marshal room gift sent failed: %v", err)
	}
	encoded, err := roommq.EncodeRoomOutboxMessage(&roomeventsv1.EventEnvelope{
		AppCode:      "lalu",
		EventId:      "room_evt_normal_gift",
		EventType:    "RoomGiftSent",
		RoomId:       "room-1",
		RoomVersion:  7,
		OccurredAtMs: 1700000000000,
		Body:         body,
	})
	if err != nil {
		t.Fatalf("encode room outbox message failed: %v", err)
	}

	event, ok, err := roomGiftCPEventFromRoomMessage(encoded)
	if err != nil {
		t.Fatalf("convert room gift event failed: %v", err)
	}
	if !ok {
		t.Fatal("normal gifts must reach CP consumer so active relationships can gain intimacy")
	}
	if event.CPRelationType != "" || event.GiftTypeCode != "normal" || event.GiftValue != 100 || event.TargetUserID != 1002 || !event.RoomLocked {
		t.Fatalf("normal gift event mismatch: %+v", event)
	}
}
