#pragma once

// JapanesePokemonGameModule: Japanese Pokémon TCG via TCGdex ja + EN catalog.

#include "ccm/games/IGameModule.hpp"
#include "ccm/games/pokemonjp/JapanesePokemonCardPreviewSource.hpp"
#include "ccm/games/pokemonjp/JapanesePokemonEnCatalog.hpp"
#include "ccm/games/pokemonjp/JapanesePokemonSetSource.hpp"

namespace ccm {

class JapanesePokemonGameModule final : public IGameModule {
public:
    explicit JapanesePokemonGameModule(IHttpClient& http,
                                       JapanesePokemonEnCatalog catalog = {});

    [[nodiscard]] Game        id() const noexcept override { return Game::JapanesePokemon; }
    [[nodiscard]] std::string dirName()     const override { return "pokemon"; }
    [[nodiscard]] std::string displayName() const override { return "Pokemon (Japan)"; }

    ISetSource&         setSource()          override { return setSource_; }
    ICardPreviewSource* cardPreviewSource() noexcept override { return &previewSource_; }

    [[nodiscard]] const JapanesePokemonEnCatalog& catalog() const noexcept {
        return catalog_;
    }

private:
    JapanesePokemonEnCatalog          catalog_;
    JapanesePokemonSetSource          setSource_;
    JapanesePokemonCardPreviewSource  previewSource_;
};

}  // namespace ccm
