#pragma once

#include <blitz/common/Types.h>
#include <vector>
#include <godot_cpp/variant/string.hpp>
#include <godot_cpp/variant/vector3.hpp>

namespace blitz {
namespace protocol {

struct PlayerInfo {
	PlayerID m_PlayerId;
	godot::String m_PlayerName;
};

namespace data {

struct PlayerLogin {
	godot::String m_PlayerName;
};

struct UpdateHealth {
	float m_NewHealth;
};

struct LoggingSuccess {
	PlayerID m_PlayerId;
};

struct PlayerDeath {};

struct PlayerJoin {
	PlayerInfo m_Player;
};

struct PlayerLeave {
	PlayerID m_PlayerId;
};

struct PlayerStats {};

struct PlayerList {
	std::vector<PlayerInfo> m_Players;
};

struct ServerConfig {};

struct ServerTps {};

struct UpdateGameState {};

struct KeepAlive {
	std::uint64_t m_KeepAliveId;
};

struct Disconnect {};

struct ChatMessage {
	godot::String m_Text;
};

struct PlayerPositionAndRotation {
	PlayerID m_Player;
	godot::Vector3 m_Position;
	godot::Vector3 m_Rotation;
	godot::Vector3 m_Velocity;
};

struct PlayerShoot {};

}  // namespace data
}  // namespace protocol
}  // namespace blitz
