package types

import (
	"sync"
	"time"

	pb "gitea.boner.be/bdnugget/goonserver/actions"
	rl "github.com/gen2brain/raylib-go/raylib"
)

type Tile struct {
	X, Y     int
	Height   float32
	Walkable bool
}

type Player struct {
	sync.Mutex
	PosActual             rl.Vector3
	PosTile               Tile
	TargetPath            []Tile
	ActionQueue           []*pb.Action
	Speed                 float32
	Model                 rl.Model
	Texture               rl.Texture2D
	ID                    int32
	CurrentTick           int64
	LastUpdateTime        time.Time
	LastAnimUpdate        time.Time
	InterpolationProgress float32
	UserData              interface{}
	FloatingMessage       *FloatingMessage
	QuitDone              chan struct{}
	AnimationFrame        int32
	IsMoving              bool
}

type AnimationSet struct {
	Idle []rl.ModelAnimation
	Walk []rl.ModelAnimation
	// Can add more animation types later like:
	// Attack []ModelAnimation
	// Jump   []ModelAnimation
}

type ModelAsset struct {
	Model      rl.Model
	Texture    rl.Texture2D
	Animation  []rl.ModelAnimation // Keep this for compatibility
	AnimFrames int32               // Keep this for compatibility
	Animations AnimationSet        // New field for organized animations
	YOffset    float32             // Additional height offset (added to default 8.0)
}

type ChatMessage struct {
	PlayerID int32
	Username string
	Content  string
	Time     time.Time
}

type FloatingMessage struct {
	Content    string
	ExpireTime time.Time
	ScreenPos  rl.Vector2 // Store the screen position for 2D rendering
}

type ChatMessageHandler interface {
	HandleServerMessages([]*pb.ChatMessage)
}

const (
	MapWidth   = 50
	MapHeight  = 50
	TileSize   = 32
	TileHeight = 2.0

	// RuneScape-style tick rate (600ms)
	ServerTickRate = 600 * time.Millisecond
	ClientTickRate = 50 * time.Millisecond
	MaxTickDesync  = 5
)
