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 moves toward stand point (npcWalkTargetId + to); position is hero x/y + speed×dt.
	NPCWalkTargetID int64   `json:"npcWalkTargetId,omitempty"`
	NPCWalkToX      float64 `json:"npcWalkToX,omitempty"`
	NPCWalkToY      float64 `json:"npcWalkToY,omitempty"`

	// After the last NPC visit: stand near them until this time (paused while dialog UI lock is on).
	TownLastNPCLingerUntil *time.Time `json:"townLastNpcLingerUntil,omitempty"`

	// Plaza: walk to town center after NPC tour, then wait/rest before leaving.
	TownPlazaHealActive bool    `json:"townPlazaHealActive,omitempty"`
	CenterWalkActive    bool    `json:"centerWalkActive,omitempty"`
	CenterWalkToX       float64 `json:"centerWalkToX,omitempty"`
	CenterWalkToY       float64 `json:"centerWalkToY,omitempty"`
	// CenterWalkStart: legacy rows only (time-based walk). New saves use centerWalkActive + to.
	CenterWalkStart *time.Time `json:"centerWalkStart,omitempty"`

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