#ifndef _STATSSCENE_H
#define _STATSSCENE_H

#include "scenes/SceneWithDialogWidget.h"
#include "gen1/Gen1Common.h"
#include "gen2/Gen2Common.h"
#include "core/Sprite.h"
#include "transferpak/TransferPakRomReader.h"
#include "transferpak/TransferPakSaveManager.h"
#include "gen1/Gen1GameReader.h"
#include "gen2/Gen2GameReader.h"

typedef struct StatsSceneContext
{
    union {
        Gen1TrainerPokemon poke_g1;
        Gen2TrainerPokemon poke_g2;
    };
    char trainerName[15];
    bool showReceivedPokemonDialog;
    bool isEgg;
} StatsSceneContext;

/**
 * Shows the stats for a pokemon
 */
class StatsScene : public SceneWithDialogWidget
{
public:
    StatsScene(SceneDependencies& deps, void* context);
    virtual ~StatsScene();

    void init() override;
    void destroy() override;

    void render(RDPQGraphics& gfx, const Rectangle& sceneBounds) override;

    void onDialogFinished();
protected:
    void setupDialog(DialogWidgetStyle& style) override;
private:
    void loadPokemonSprite(uint8_t pokeIndex, bool shiny);

    DialogData diag_;
    TransferPakRomReader romReader_;
    TransferPakSaveManager saveManager_;
    Gen1GameReader gen1GameReader_;
    Gen2GameReader gen2GameReader_;
    sprite_t* menu9SliceSprite_;
    SpriteRenderSettings backgroundRenderSettings_;
    uint8_t fontMainFontSmallId_;
    uint8_t fontMainFontSmallWhiteId_;
    TextRenderSettings textSettings_;
    TextRenderSettings smallTextSettings_;
    TextRenderSettings statsSettings_;
    Rectangle spriteBounds_;
    char nameBuffer_[25];
    char levelAndNumberBuffer_[40];
    char pokeStatsString_[150];
    char otInfoString_[40];
    char movesString[256];
    StatsSceneContext* context_;
    surface_t pokeSpriteSurface_;

};

void deleteStatsSceneContext(void* context);

#endif