package model

import "time"

// TownPausePersisted mirrors HeroMovement fields needed to resume resting, an in-town NPC tour,
// or a mid-adventure excursion after reconnect or during offline catch-up.
// Stored in heroes.town_pause (JSONB).
type TownPausePersisted struct {
	RestUntil             *time.Time `json:"restUntil,omitempty"`
	RestKind              RestKind   `json:"restKind,omitempty"`
	TownRestHealRemainder float64    `json:"townRestHealRemainder,omitempty"`
	RestHealRemainder     float64    `json:"restHealRemainder,omitempty"`

	NPCQueue             []int64    `json:"npcQueue,omitempty"`
	NextTownNPCRollAt    *time.Time `json:"nextTownNPCRollAt,omitempty"`
	TownLeaveAt          *time.Time `json:"townLeaveAt,omitempty"`
	TownVisitNPCName     string     `json:"townVisitNPCName,omitempty"`
	TownVisitNPCType     string     `json:"townVisitNPCType,omitempty"`
	TownVisitStartedAt   *time.Time `json:"townVisitStartedAt,omitempty"`
	TownVisitLogsEmitted int        `json:"townVisitLogsEmitted,omitempty"`

	// Walk-to-NPC: hero is mid-walk toward an NPC inside the town.
	NPCWalkTargetID int64      `json:"npcWalkTargetId,omitempty"`
	NPCWalkFromX    float64    `json:"npcWalkFromX,omitempty"`
	NPCWalkFromY    float64    `json:"npcWalkFromY,omitempty"`
	NPCWalkToX      float64    `json:"npcWalkToX,omitempty"`
	NPCWalkToY      float64    `json:"npcWalkToY,omitempty"`
	NPCWalkStart    *time.Time `json:"npcWalkStart,omitempty"`
	NPCWalkArrive   *time.Time `json:"npcWalkArrive,omitempty"`

	// Plaza: walk to town center after NPC tour, then wait/rest before leaving.
	TownPlazaHealActive bool       `json:"townPlazaHealActive,omitempty"`
	CenterWalkFromX     float64    `json:"centerWalkFromX,omitempty"`
	CenterWalkFromY     float64    `json:"centerWalkFromY,omitempty"`
	CenterWalkToX       float64    `json:"centerWalkToX,omitempty"`
	CenterWalkToY       float64    `json:"centerWalkToY,omitempty"`
	CenterWalkStart     *time.Time `json:"centerWalkStart,omitempty"`
	CenterWalkArrive    *time.Time `json:"centerWalkArrive,omitempty"`

	// Excursion (mini-adventure) session persisted for reconnect / offline resume.
	Excursion *ExcursionPersisted `json:"excursion,omitempty"`
}
