// ============================================================================
// MONOPOLY GAME HEADER
// ============================================================================
// Concrete implementation of the Game interface for Monopoly

#ifndef MONOPOLY_GAME_H
#define MONOPOLY_GAME_H

#include "../../lib/game.h"
#include "player.h"
#include "monopoly_board.h"
#include "chance.h"
#include "community_chest.h"

/**
 * @brief Monopoly game implementation for the custom console
 *
 * - Button/touch input for actions
 * - Board and player state
 * - Rendering and input handling
 */
class MonopolyGame : public Game {
public:
    MonopolyGame(uint16_t width, uint16_t height, LowLevelRenderer* renderer, LowLevelGUI* gui, InputManager* input_manager);
    void init() override;
    bool update(const InputEvent& event) override;
    void draw() override;


private:
    // Game state and helpers
    Player players[MAX_PLAYERS];
    int players_count;
    int current_player_idx;
    bool has_rolled;
    int double_rolls;
    bool just_sent_to_jail;

    // UI selection state
    int selected_action; // 0: Context action, 1: Pay $50 (Jail), 2: View Board
    int current_action_count = 2;

    // Modal games
    Game* active_modal = nullptr;
    int last_dice1 = 0;
    int last_dice2 = 0;
    int modal_property_index = -1;
    int chance_deck[CHANCE_DECK_SIZE];
    int current_chance_idx;
    int last_drawn_chance_idx = -1;
    int community_deck[COMMUNITY_DECK_SIZE];
    int current_community_idx;
    int last_drawn_community_idx = -1;
    int rent_multiplier = 1;
    bool force_utility_10x = false;

    void shuffle_chance_deck();
    void shuffle_community_deck();
};

#endif // MONOPOLY_GAME_H
