#pragma once

#include <vector>
#include "cfg/api.h"

namespace games::nost {

    // all buttons in correct order
    namespace Buttons {
        enum Button {
            Service,
            Test,
            CoinMech,
            Key1,
            Key2,
            Key3,
            Key4,
            Key5,
            Key6,
            Key7,
            Key8,
            Key9,
            Key10,
            Key11,
            Key12,
            Key13,
            Key14,
            Key15,
            Key16,
            Key17,
            Key18,
            Key19,
            Key20,
            Key21,
            Key22,
            Key23,
            Key24,
            Key25,
            Key26,
            Key27,
            Key28,
            Key1Soft,
            Key2Soft,
            Key3Soft,
            Key4Soft,
            Key5Soft,
            Key6Soft,
            Key7Soft,
            Key8Soft,
            Key9Soft,
            Key10Soft,
            Key11Soft,
            Key12Soft,
            Key13Soft,
            Key14Soft,
            Key15Soft,
            Key16Soft,
            Key17Soft,
            Key18Soft,
            Key19Soft,
            Key20Soft,
            Key21Soft,
            Key22Soft,
            Key23Soft,
            Key24Soft,
            Key25Soft,
            Key26Soft,
            Key27Soft,
            Key28Soft,
            Key1Medium,
            Key2Medium,
            Key3Medium,
            Key4Medium,
            Key5Medium,
            Key6Medium,
            Key7Medium,
            Key8Medium,
            Key9Medium,
            Key10Medium,
            Key11Medium,
            Key12Medium,
            Key13Medium,
            Key14Medium,
            Key15Medium,
            Key16Medium,
            Key17Medium,
            Key18Medium,
            Key19Medium,
            Key20Medium,
            Key21Medium,
            Key22Medium,
            Key23Medium,
            Key24Medium,
            Key25Medium,
            Key26Medium,
            Key27Medium,
            Key28Medium,
            Key1Hard,
            Key2Hard,
            Key3Hard,
            Key4Hard,
            Key5Hard,
            Key6Hard,
            Key7Hard,
            Key8Hard,
            Key9Hard,
            Key10Hard,
            Key11Hard,
            Key12Hard,
            Key13Hard,
            Key14Hard,
            Key15Hard,
            Key16Hard,
            Key17Hard,
            Key18Hard,
            Key19Hard,
            Key20Hard,
            Key21Hard,
            Key22Hard,
            Key23Hard,
            Key24Hard,
            Key25Hard,
            Key26Hard,
            Key27Hard,
            Key28Hard,
            PokeNextPage,
            PokePrevPage,
            PokeConfirm,
            PokeBack,
            PokeSong1,
            PokeSong2,
            PokeSong3,
            PokeSong4,
            PokeSong5,
            PokeSong6,
            PokeDifficulty1,
            PokeDifficulty2,
            PokeDifficulty3,
            PokeDifficulty4,
        };
    }

    // all analogs in correct order
    namespace Analogs {
        enum {
            Key1,
            Key2,
            Key3,
            Key4,
            Key5,
            Key6,
            Key7,
            Key8,
            Key9,
            Key10,
            Key11,
            Key12,
            Key13,
            Key14,
            Key15,
            Key16,
            Key17,
            Key18,
            Key19,
            Key20,
            Key21,
            Key22,
            Key23,
            Key24,
            Key25,
            Key26,
            Key27,
            Key28,
        };
    }

    // all lights in correct order
    namespace Lights {
        enum {
            TitleR,
            TitleG,
            TitleB,
            BottomR,
            BottomG,
            BottomB,
            Key1R,
            Key1G,
            Key1B,
            Key2R,
            Key2G,
            Key2B,
            Key3R,
            Key3G,
            Key3B,
            Key4R,
            Key4G,
            Key4B,
            Key5R,
            Key5G,
            Key5B,
            Key6R,
            Key6G,
            Key6B,
            Key7R,
            Key7G,
            Key7B,
            Key8R,
            Key8G,
            Key8B,
            Key9R,
            Key9G,
            Key9B,
            Key10R,
            Key10G,
            Key10B,
            Key11R,
            Key11G,
            Key11B,
            Key12R,
            Key12G,
            Key12B,
            Key13R,
            Key13G,
            Key13B,
            Key14R,
            Key14G,
            Key14B,
            Key15R,
            Key15G,
            Key15B,
            Key16R,
            Key16G,
            Key16B,
            Key17R,
            Key17G,
            Key17B,
            Key18R,
            Key18G,
            Key18B,
            Key19R,
            Key19G,
            Key19B,
            Key20R,
            Key20G,
            Key20B,
            Key21R,
            Key21G,
            Key21B,
            Key22R,
            Key22G,
            Key22B,
            Key23R,
            Key23G,
            Key23B,
            Key24R,
            Key24G,
            Key24B,
            Key25R,
            Key25G,
            Key25B,
            Key26R,
            Key26G,
            Key26B,
            Key27R,
            Key27G,
            Key27B,
            Key28R,
            Key28G,
            Key28B,
        };
    }

    // getters
    std::vector<Button> &get_buttons();
    std::string get_buttons_help();
    std::vector<Analog> &get_analogs();
    std::vector<Light> &get_lights();
}
