// playdate/common.h - Common declarations for Playdate Cell integration
// This header declares the global API pointers that are initialized in main_playdate.c
// and used by all the Playdate integration modules.

#ifndef PLAYDATE_COMMON_H
#define PLAYDATE_COMMON_H

#include "pd_api/pd_api_file.h"
#include "pd_api/pd_api_gfx.h"
#include "pd_api/pd_api_sys.h"
#include "pd_api/pd_api_sound.h"
#include "pd_api/pd_api_sprite.h"
#include "pd_api/pd_api_display.h"
#include "pd_api/pd_api_json.h"
#include "pd_api/pd_api_lua.h"
#include "pd_api/pd_api_network.h"
#include "pd_api/pd_api_scoreboards.h"

// Forward declare the main PlaydateAPI struct
typedef struct PlaydateAPI PlaydateAPI;

struct PlaydateAPI
{
    const struct playdate_sys *system;
    const struct playdate_file *file;
    const struct playdate_graphics *graphics;
    const struct playdate_sprite *sprite;
    const struct playdate_display *display;
    const struct playdate_sound *sound;
    const struct playdate_lua *lua;
    const struct playdate_json *json;
    const struct playdate_scoreboards *scoreboards;
    const struct playdate_network *network;
};

// System events
typedef enum
{
    kEventInit,
    kEventInitLua,
    kEventLock,
    kEventUnlock,
    kEventPause,
    kEventResume,
    kEventTerminate,
    kEventKeyPressed,
    kEventKeyReleased,
    kEventLowPower
} PDSystemEvent;

// Global API pointers - defined in main_playdate.c
extern PlaydateAPI *pd;
extern const struct playdate_file *pd_file;
extern const struct playdate_sys *pd_sys;
extern const struct playdate_graphics *pd_gfx;
extern const struct playdate_sprite *pd_sprite;
extern const struct playdate_display *pd_display;
extern const struct playdate_sound *pd_sound;
extern const struct playdate_lua *pd_lua;
extern const struct playdate_json *pd_json;
extern const struct playdate_scoreboards *pd_scoreboards;
extern const struct playdate_network *pd_network;

#endif // PLAYDATE_COMMON_H
