#pragma once
#include <stdint.h>
#include <stddef.h>
#include "include/raylib.h"

typedef uint8_t   u8;
// typedef char16_t  c16;
typedef uint16_t  u16;
typedef int16_t  i16;
typedef int32_t   b32;
typedef int32_t   i32;
typedef uint32_t  u32;
typedef uint64_t  u64;
typedef float     f32;
typedef double    f64;
typedef uintptr_t uptr;
typedef char      byte;
typedef ptrdiff_t size;
typedef size_t    usize;

typedef Vector2 Point;

typedef struct Size {
    float width;
    float height;
} Size;

typedef struct Rect {
    Point position;
    Size size;
} Rect;

typedef union {
    Rect components;
    Rectangle rect;
} RectU;

typedef struct PointOrNone {
    enum {NONE, POINT} type;
    union {
        byte none;
        Point point;
    } value;
} PointOrNone;


void D_DrawTextureRec(Texture2D texture, Rectangle source, Vector2 position, Color tint);
void D_DrawTexturePro(Texture2D texture, Rectangle source, Rectangle dest, Vector2 origin, float rotation, Color tint);
void D_DrawTextureV(Texture2D texture, Vector2 position, Color tint);
#ifdef ENNIX_LIB_IMPLEMENTATION
extern bool global_debug_mode;
inline void D_DrawTextureV(Texture2D texture, Vector2 position, Color tint) {
    DrawTextureV(texture, position, tint);
#ifdef DEBUG_MODE_ENABLED
    if (global_debug_mode) {
        Rectangle debug = {position.x,position.y,texture.width,texture.height};
        DrawRectangleLinesEx(debug, 1.0f, RED);
    }
#endif
}

inline void D_DrawTextureRec(Texture2D texture, Rectangle source, Vector2 position, Color tint) {
    DrawTextureRec(texture, source, position, tint);
#ifdef DEBUG_MODE_ENABLED
    if (global_debug_mode) {
        Rectangle debug = {position.x,position.y,source.width,source.height};
        DrawRectangleLinesEx(debug, 1.0f, RED);
    }
#endif
}

inline void D_DrawTexturePro(Texture2D texture, Rectangle source, Rectangle dest, Vector2 origin, float rotation, Color tint) {
    DrawTexturePro(texture, source, dest, origin, rotation, tint);
#ifdef DEBUG_MODE_ENABLED
    if (global_debug_mode) {
        Rectangle debug = {dest.x-origin.x,dest.y-origin.y,dest.width,dest.height};
        DrawRectangleLinesEx(debug, 1.0f, RED);
    }
#endif
}

#endif
