#ifndef PACKET_H
#define PACKET_H

#include <string>
#include <cstdint>
#include <vector>
#include <winsock2.h>
#include <ws2tcpip.h>

enum PacketType : uint8_t {
    HEARTBEAT = 1,
    JOIN,
    DISCONNECT,
    MOVE,
    CHAT,
    PLAYER_UPDATE,
    SCORE_UPDATE,
    GAME_START,
    GAME_END,
    PING,
    PONG,
    AUTH_REQUEST,
    AUTH_RESPONSE,
    PACKET_MAX
};

struct Packet
{
    PacketType type;
    std::string data;
};

uint32_t to_network_uint32(uint32_t host);
uint32_t from_network_uint32(uint32_t net);
bool send_all(SOCKET sock, const char *data, size_t len);
bool recv_all(SOCKET sock, char *buffer, size_t len);
bool sendPacket(SOCKET sock, const Packet &packet);
bool receivePacket(SOCKET sock, Packet &packet);

#endif // PACKET_H