// Inject.h - Public declarations for Inject.DLL
#pragma once

#ifdef INJECT_EXPORTS
#define INJECT_API __declspec(dllexport)
#else
#define INJECT_API __declspec(dllimport)
#endif

// Lifecycle exports
extern "C" INJECT_API void __stdcall DecalStartup();
extern "C" INJECT_API void __stdcall Container_Initialize(HWND hWnd, void* pDevice);
extern "C" INJECT_API void __stdcall Container_StartPlugins();
extern "C" INJECT_API void __stdcall Container_StopPlugins();
extern "C" INJECT_API void __stdcall Container_Terminate();
extern "C" INJECT_API void __stdcall Container_Draw();

// D3D9 vtable hooking utilities
extern "C" INJECT_API BOOL __stdcall HookVTable(void* pInterface, int nIndex, void* pNewFunction);
extern "C" INJECT_API BOOL __stdcall UnhookVTable(void* pInterface, int nIndex);
extern "C" INJECT_API void* __stdcall GetVTableEntry(void* pInterface, int nIndex);

// Memory patching
extern "C" INJECT_API BOOL __stdcall PatchMemory(void* pAddress, const void* pData, DWORD dwSize);

// Original D3D9 function pointers (for DecalRender/D3DService to call through)
extern "C" INJECT_API void* BeginSceneO;
extern "C" INJECT_API void* EndSceneO;

// Path mapping
extern "C" INJECT_API LPTSTR __stdcall InjectMapPath(int pathType, LPCTSTR szFilename, LPTSTR szBuffer);

// COM server standard exports
STDAPI DllCanUnloadNow();
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv);
STDAPI DllRegisterServer();
STDAPI DllUnregisterServer();
