package handler

import (
	"testing"
	"time"

	"github.com/denisovdennis/autohero/internal/model"
	"github.com/denisovdennis/autohero/internal/storage"
)

func TestBuildOfflineReportFromDigest_Fought(t *testing.T) {
	h := &GameHandler{}
	hero := &model.Hero{State: model.StateWalking, HP: 100}
	d := storage.OfflineDigestRow{
		MonstersKilled: 2,
		XPGained:       10,
		GoldGained:     5,
		Loot:           []model.LootDrop{},
	}
	r := h.buildOfflineReportFromDigest(hero, time.Minute, d)
	if r == nil {
		t.Fatal("expected report")
	}
	if r.MonstersKilled != 2 || r.XPGained != 10 || r.GoldGained != 5 {
		t.Fatalf("unexpected counters: %+v", r)
	}
	if r.Message == "" {
		t.Fatal("expected message")
	}
}

func TestBuildOfflineReportFromDigest_EmptyAlive(t *testing.T) {
	h := &GameHandler{}
	hero := &model.Hero{State: model.StateWalking, HP: 100}
	d := storage.OfflineDigestRow{Loot: []model.LootDrop{}}
	if r := h.buildOfflineReportFromDigest(hero, time.Minute, d); r != nil {
		t.Fatalf("expected nil, got %+v", r)
	}
}

func TestBuildOfflineReportFromDigest_DeadNoDigest(t *testing.T) {
	h := &GameHandler{}
	hero := &model.Hero{State: model.StateDead, HP: 0}
	d := storage.OfflineDigestRow{Loot: []model.LootDrop{}}
	r := h.buildOfflineReportFromDigest(hero, time.Minute, d)
	if r == nil {
		t.Fatal("expected death message report")
	}
}
