#ifndef MENU_H
#define MENU_H

#include "raylib.h"
#include "world.h"

// Menu state enumeration
typedef enum {
    MENU_STATE_MAIN,
    MENU_STATE_WORLD_SELECT,
    MENU_STATE_CREATE_WORLD,
    MENU_STATE_CREDITS,
    MENU_STATE_SETTINGS,
    MENU_STATE_GAME
} MenuState;

// World info structure for display in world select menu
typedef struct {
    char name[256];
    char created[64];
    int chunk_count;
} WorldInfo;

// Game text localization (used in-game for HUD, pause menu, etc)
typedef struct {
    char move_controls[256];
    char metrics_help[256];
    char mouse_help[256];
    char look_help[256];
    char pause_help[256];
    char paused[64];
    char resume[64];
    char back_to_menu[64];
    char perf_metrics[256];
    char system_info[256];
    char player_info[256];
    char fps_label[64];
    char coord_label[64];
    char version[256];
    // Settings menu text
    char settings[64];
    char render_dist_label[256];
    char max_fps_label[256];
    char font_family_label[256];
    char font_variant_label[256];
    char uncapped[64];
    // Credits & Info text
    char press_esc_to_return[256];
    char see_full_info[64];
    // Chat feedback messages
    char msg_quitting[128];
    char msg_teleported[256];
    char msg_teleport_usage[128];
    char msg_world_saved[256];
    char msg_world_save_failed[256];
    char msg_world_loaded[256];
    char msg_world_load_failed[256];
    char msg_invalid_world_name[256];
    char msg_block_selected[128];
    char msg_unknown_block[512];
    char msg_flight_enabled[256];
    char msg_flight_disabled[128];
    char msg_fly_usage[256];
    char msg_noclip_enabled[256];
    char msg_noclip_disabled[128];
    char msg_noclip_usage[256];
    char msg_block_set[256];
    char msg_out_of_bounds[256];
    char msg_setblock_usage[256];
    char msg_unknown_command[256];
    char msg_chunk_borders_enabled[256];
    char msg_chunk_borders_disabled[256];
    char msg_chunk_borders_usage[256];
    char inventory_title[64];
    char inventory_close[128];
} GameText;

// Menu system state
typedef struct {
    MenuState current_state;
    MenuState previous_state;
    WorldInfo* available_worlds;
    int world_count;
    int selected_world_index;
    bool should_start_game;
    char selected_world_name[256];
    // Create world dialog
    char new_world_name[256];
    int new_world_name_len;
    bool create_world_error;
    bool create_world_compress;
    char create_world_error_msg[256];
    // Background image
    Texture2D background_texture;
    bool background_loaded;
    // Splash texts
    char splash_texts[256][512];  // Up to 256 splash texts, max 512 chars each
    int splash_texts_count;
    char current_splash_text[512];
    // Localization
    char current_language[32];
    char available_languages[16][32];  // Up to 16 language codes
    int available_languages_count;
    int current_language_index;
    // Menu text
    char text_select_world[256];
    char text_create_world[256];
    char text_credits_info[256];
    char text_quit[256];
    char text_back[256];
    char text_world_name_label[512];
    char text_compress_world_files[256];
    char text_create_btn[128];
    char text_cancel_btn[128];
    char text_error_empty_name[256];
    char text_error_exists[256];
    char text_no_worlds[256];
    char text_title_create_world[256];
    char text_title_select_world[256];
    char text_last[128];
    char text_chunks[128];
    // Game text (in-game HUD, pause menu, etc)
    GameText game_text;
    // Credits & info text
    char credits_text[4096];
    // Settings
    float render_distance;
    int max_fps;
    char nickname[64];
    int nickname_len;
    bool nickname_edit_active;
    bool clouds_enabled;
    bool compass_enabled;
    float clouds_render_distance;
    // Font selection
    char font_families[16][256];  // Up to 16 font families (folder names)
    int font_families_count;
    int current_font_family_index;
    // Font variants for current family
    char font_variants[32][256];  // Up to 32 variants per family
    int font_variants_count;
    int current_font_variant_index;
} MenuSystem;

// Function declarations
MenuSystem* menu_system_create(void);
void menu_system_free(MenuSystem* menu);
void menu_scan_worlds(MenuSystem* menu);
void menu_scan_fonts(MenuSystem* menu);
void menu_scan_font_variants(MenuSystem* menu, const char* font_family);
void menu_draw_main(MenuSystem* menu, Font font);
void menu_draw_world_select(MenuSystem* menu, Font font);
void menu_draw_create_world(MenuSystem* menu, Font font);
void menu_draw_credits(MenuSystem* menu, Font font);
void menu_draw_settings(MenuSystem* menu, Font font);
// Use SDF-aware draw helper from main.c for consistent font rendering
void DrawTextExCustom(Font font, const char *text, Vector2 position, float fontSize, float spacing, Color tint);
void menu_update_input(MenuSystem* menu);
void menu_load_language(MenuSystem* menu, const char* language);
bool menu_load_text_file(const char* language, const char* filename, char* out_buffer, int buffer_size);
void menu_load_settings(MenuSystem* menu);
void menu_save_settings(MenuSystem* menu);

#endif
