#ifndef GUARD_TRAINERS_H
#define GUARD_TRAINERS_H

#include "constants/opponents.h"

// Special Trainer Ids.
#define TRAINER_FRONTIER_BRAIN      1022
#define TRAINER_PLAYER              1023
#define TRAINER_SECRET_BASE         1024
#define TRAINER_LINK_OPPONENT       2048
#define TRAINER_OPPONENT_C00        3072
#define TRAINER_STEVEN_PARTNER      3075

#define TRAINER_PIC_HIKER                  0
#define TRAINER_PIC_AQUA_GRUNT_M           1
#define TRAINER_PIC_POKEMON_BREEDER_F      2
#define TRAINER_PIC_COOL_TRAINER_M         3
#define TRAINER_PIC_BIRD_KEEPER            4
#define TRAINER_PIC_COLLECTOR              5
#define TRAINER_PIC_AQUA_GRUNT_F           6
#define TRAINER_PIC_SWIMMER_M              7
#define TRAINER_PIC_MAGMA_GRUNT_M          8
#define TRAINER_PIC_EXPERT_M               9
#define TRAINER_PIC_AQUA_ADMIN_M          10
#define TRAINER_PIC_BLACK_BELT            11
#define TRAINER_PIC_AQUA_ADMIN_F          12
#define TRAINER_PIC_AQUA_LEADER_ARCHIE    13
#define TRAINER_PIC_HEX_MANIAC            14
#define TRAINER_PIC_AROMA_LADY            15
#define TRAINER_PIC_RUIN_MANIAC           16
#define TRAINER_PIC_INTERVIEWER           17
#define TRAINER_PIC_TUBER_F               18
#define TRAINER_PIC_TUBER_M               19
#define TRAINER_PIC_COOL_TRAINER_F        20
#define TRAINER_PIC_LADY                  21
#define TRAINER_PIC_BEAUTY                22
#define TRAINER_PIC_RICH_BOY              23
#define TRAINER_PIC_EXPERT_F              24
#define TRAINER_PIC_POKEMANIAC            25
#define TRAINER_PIC_MAGMA_GRUNT_F         26
#define TRAINER_PIC_GUITARIST             27
#define TRAINER_PIC_KINDLER               28
#define TRAINER_PIC_CAMPER                29
#define TRAINER_PIC_PICNICKER             30
#define TRAINER_PIC_BUG_MANIAC            31
#define TRAINER_PIC_POKEMON_BREEDER_M     32
#define TRAINER_PIC_PSYCHIC_M             33
#define TRAINER_PIC_PSYCHIC_F             34
#define TRAINER_PIC_GENTLEMAN             35
#define TRAINER_PIC_ELITE_FOUR_SIDNEY     36
#define TRAINER_PIC_ELITE_FOUR_PHOEBE     37
#define TRAINER_PIC_ELITE_FOUR_GLACIA     38
#define TRAINER_PIC_ELITE_FOUR_DRAKE      39
#define TRAINER_PIC_LEADER_ROXANNE        40
#define TRAINER_PIC_LEADER_BRAWLY         41
#define TRAINER_PIC_LEADER_WATTSON        42
#define TRAINER_PIC_LEADER_FLANNERY       43
#define TRAINER_PIC_LEADER_NORMAN         44
#define TRAINER_PIC_LEADER_WINONA         45
#define TRAINER_PIC_LEADER_TATE_AND_LIZA  46
#define TRAINER_PIC_LEADER_JUAN           47
#define TRAINER_PIC_SCHOOL_KID_M          48
#define TRAINER_PIC_SCHOOL_KID_F          49
#define TRAINER_PIC_SR_AND_JR             50
#define TRAINER_PIC_WINSTRATE_M           51
#define TRAINER_PIC_WINSTRATE_F           52
#define TRAINER_PIC_YOUNGSTER             53
#define TRAINER_PIC_CHAMPION_WALLACE      54
#define TRAINER_PIC_FISHERMAN             55
#define TRAINER_PIC_CYCLING_TRIATHLETE_M  56
#define TRAINER_PIC_CYCLING_TRIATHLETE_F  57
#define TRAINER_PIC_RUNNING_TRIATHLETE_M  58
#define TRAINER_PIC_RUNNING_TRIATHLETE_F  59
#define TRAINER_PIC_SWIMMING_TRIATHLETE_M 60
#define TRAINER_PIC_SWIMMING_TRIATHLETE_F 61
#define TRAINER_PIC_DRAGON_TAMER          62
#define TRAINER_PIC_NINJA_BOY             63
#define TRAINER_PIC_BATTLE_GIRL           64
#define TRAINER_PIC_PARASOL_LADY          65
#define TRAINER_PIC_SWIMMER_F             66
#define TRAINER_PIC_TWINS                 67
#define TRAINER_PIC_SAILOR                68
#define TRAINER_PIC_MAGMA_ADMIN           69
#define TRAINER_PIC_WALLY                 70
#define TRAINER_PIC_BRENDAN               71
#define TRAINER_PIC_MAY                   72
#define TRAINER_PIC_BUG_CATCHER           73
#define TRAINER_PIC_POKEMON_RANGER_M      74
#define TRAINER_PIC_POKEMON_RANGER_F      75
#define TRAINER_PIC_MAGMA_LEADER_MAXIE    76
#define TRAINER_PIC_LASS                  77
#define TRAINER_PIC_YOUNG_COUPLE          78
#define TRAINER_PIC_OLD_COUPLE            79
#define TRAINER_PIC_SIS_AND_BRO           80
#define TRAINER_PIC_STEVEN                81
#define TRAINER_PIC_SALON_MAIDEN_ANABEL   82
#define TRAINER_PIC_DOME_ACE_TUCKER       83
#define TRAINER_PIC_PALACE_MAVEN_SPENSER  84
#define TRAINER_PIC_ARENA_TYCOON_GRETA    85
#define TRAINER_PIC_FACTORY_HEAD_NOLAND   86
#define TRAINER_PIC_PIKE_QUEEN_LUCY       87
#define TRAINER_PIC_PYRAMID_KING_BRANDON  88
#define TRAINER_PIC_RED                   89
#define TRAINER_PIC_LEAF                  90
#define TRAINER_PIC_RUBY_SAPPHIRE_BRENDAN 91
#define TRAINER_PIC_RUBY_SAPPHIRE_MAY     92

#define TRAINER_BACK_PIC_BRENDAN                0
#define TRAINER_BACK_PIC_MAY                    1
#define TRAINER_BACK_PIC_RED                    2
#define TRAINER_BACK_PIC_LEAF                   3
#define TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN  4
#define TRAINER_BACK_PIC_RUBY_SAPPHIRE_MAY      5
#define TRAINER_BACK_PIC_WALLY                  6
#define TRAINER_BACK_PIC_STEVEN                 7

#define FACILITY_CLASS_HIKER           0x0
#define FACILITY_CLASS_TEAM_AQUA_1     0x1
#define FACILITY_CLASS_PKMN_BREEDER_1  0x2
#define FACILITY_CLASS_COOLTRAINER_M   0x3
#define FACILITY_CLASS_BIRD_KEEPER     0x4
#define FACILITY_CLASS_COLLECTOR       0x5
#define FACILITY_CLASS_TEAM_AQUA_2     0x6
#define FACILITY_CLASS_SWIMMER_M       0x7
#define FACILITY_CLASS_TEAM_MAGMA_1    0x8
#define FACILITY_CLASS_EXPERT_M        0x9
#define FACILITY_CLASS_BLACK_BELT      0xa
#define FACILITY_CLASS_AQUA_LEADER     0xb
#define FACILITY_CLASS_HEX_MANIAC      0xc
#define FACILITY_CLASS_AROMA_LADY      0xd
#define FACILITY_CLASS_RUIN_MANIAC     0xe
#define FACILITY_CLASS_INTERVIEWER     0xf
#define FACILITY_CLASS_TUBER_1         0x10
#define FACILITY_CLASS_TUBER_2         0x11
#define FACILITY_CLASS_COOLTRAINER_F   0x12
#define FACILITY_CLASS_LADY            0x13
#define FACILITY_CLASS_BEAUTY          0x14
#define FACILITY_CLASS_RICH_BOY        0x15
#define FACILITY_CLASS_EXPERT_2        0x16
#define FACILITY_CLASS_POKEMANIAC      0x17
#define FACILITY_CLASS_TEAM_MAGMA_2    0x18
#define FACILITY_CLASS_GUITARIST       0x19
#define FACILITY_CLASS_KINDLER         0x1a
#define FACILITY_CLASS_CAMPER          0x1b
#define FACILITY_CLASS_PICNICKER       0x1c
#define FACILITY_CLASS_BUG_MANIAC      0x1d
#define FACILITY_CLASS_PSYCHIC_M       0x1e
#define FACILITY_CLASS_PSYCHIC_F       0x1f
#define FACILITY_CLASS_GENTLEMAN       0x20
#define FACILITY_CLASS_ELITE_FOUR_1    0x21
#define FACILITY_CLASS_ELITE_FOUR_2    0x22
#define FACILITY_CLASS_LEADER_1        0x23
#define FACILITY_CLASS_LEADER_2        0x24
#define FACILITY_CLASS_LEADER_3        0x25
#define FACILITY_CLASS_SCHOOL_KID_M    0x26
#define FACILITY_CLASS_SCHOOL_KID_F    0x27
#define FACILITY_CLASS_SR_AND_JR       0x28
#define FACILITY_CLASS_POKEFAN_1       0x29
#define FACILITY_CLASS_POKEFAN_2       0x2a
#define FACILITY_CLASS_YOUNGSTER       0x2b
#define FACILITY_CLASS_CHAMPION        0x2c
#define FACILITY_CLASS_FISHERMAN       0x2d
#define FACILITY_CLASS_TRIATHLETE_1    0x2e
#define FACILITY_CLASS_TRIATHLETE_2    0x2f
#define FACILITY_CLASS_TRIATHLETE_3    0x30
#define FACILITY_CLASS_TRIATHLETE_4    0x31
#define FACILITY_CLASS_TRIATHLETE_5    0x32
#define FACILITY_CLASS_TRIATHLETE_6    0x33
#define FACILITY_CLASS_DRAGON_TAMER    0x34
#define FACILITY_CLASS_NINJA_BOY       0x35
#define FACILITY_CLASS_BATTLE_GIRL     0x36
#define FACILITY_CLASS_PARASOL_LADY    0x37
#define FACILITY_CLASS_SWIMMER_F       0x38
#define FACILITY_CLASS_TWINS           0x39
#define FACILITY_CLASS_SAILOR          0x3a
#define FACILITY_CLASS_PKMN_TRAINER_1  0x3b
#define FACILITY_CLASS_PKMN_TRAINER_BRENDAN  0x3c
#define FACILITY_CLASS_PKMN_TRAINER_3  0x3d
#define FACILITY_CLASS_PKMN_TRAINER_4  0x3e
#define FACILITY_CLASS_PKMN_TRAINER_MAY  0x3f
#define FACILITY_CLASS_PKMN_TRAINER_6  0x40
#define FACILITY_CLASS_PKMN_TRAINER_7  0x41
#define FACILITY_CLASS_PKMN_BREEDER_2  0x42
#define FACILITY_CLASS_BUG_CATCHER     0x43
#define FACILITY_CLASS_PKMN_RANGER_M   0x44
#define FACILITY_CLASS_PKMN_RANGER_F   0x45
#define FACILITY_CLASS_MAGMA_LEADER    0x46
#define FACILITY_CLASS_LASS            0x47
#define FACILITY_CLASS_YOUNG_COUPLE    0x48
#define FACILITY_CLASS_OLD_COUPLE      0x49
#define FACILITY_CLASS_SIS_AND_BRO     0x4a
#define FACILITY_CLASS_PKMN_TRAINER_STEVEN  0x4b
#define FACILITY_CLASS_SALON_MAIDEN    0x4c
#define FACILITY_CLASS_DOME_ACE        0x4d
#define FACILITY_CLASS_PKMN_TRAINER_RED  0x4e
#define FACILITY_CLASS_PKMN_TRAINER_LEAF 0x4f
#define FACILITY_CLASS_PKMN_TRAINER_RS_BRENDAN 0x50
#define FACILITY_CLASS_PKMN_TRAINER_RS_MAY 0x51

#define TRAINER_CLASS_PKMN_TRAINER_1 0x0
#define TRAINER_CLASS_PKMN_TRAINER_2 0x1
#define TRAINER_CLASS_HIKER          0x2
#define TRAINER_CLASS_TEAM_AQUA      0x3
#define TRAINER_CLASS_PKMN_BREEDER   0x4
#define TRAINER_CLASS_COOLTRAINER_1  0x5
#define TRAINER_CLASS_BIRD_KEEPER    0x6
#define TRAINER_CLASS_COLLECTOR      0x7
#define TRAINER_CLASS_SWIMMER_M      0x8
#define TRAINER_CLASS_TEAM_MAGMA     0x9
#define TRAINER_CLASS_EXPERT         0xa
#define TRAINER_CLASS_AQUA_ADMIN     0xb
#define TRAINER_CLASS_BLACK_BELT     0xc
#define TRAINER_CLASS_AQUA_LEADER    0xd
#define TRAINER_CLASS_HEX_MANIAC     0xe
#define TRAINER_CLASS_AROMA_LADY     0xf
#define TRAINER_CLASS_RUIN_MANIAC    0x10
#define TRAINER_CLASS_INTERVIEWER    0x11
#define TRAINER_CLASS_TUBER_1        0x12
#define TRAINER_CLASS_TUBER_2        0x13
#define TRAINER_CLASS_LADY           0x14
#define TRAINER_CLASS_BEAUTY         0x15
#define TRAINER_CLASS_RICH_BOY       0x16
#define TRAINER_CLASS_POKEMANIAC     0x17
#define TRAINER_CLASS_GUITARIST      0x18
#define TRAINER_CLASS_KINDLER        0x19
#define TRAINER_CLASS_CAMPER         0x1a
#define TRAINER_CLASS_PICNICKER      0x1b
#define TRAINER_CLASS_BUG_MANIAC     0x1c
#define TRAINER_CLASS_PSYCHIC        0x1d
#define TRAINER_CLASS_GENTLEMAN      0x1e
#define TRAINER_CLASS_ELITE_FOUR     0x1f
#define TRAINER_CLASS_LEADER         0x20
#define TRAINER_CLASS_SCHOOL_KID     0x21
#define TRAINER_CLASS_SR_AND_JR      0x22
#define TRAINER_CLASS_WINSTRATE      0x23
#define TRAINER_CLASS_POKEFAN        0x24
#define TRAINER_CLASS_YOUNGSTER      0x25
#define TRAINER_CLASS_CHAMPION       0x26
#define TRAINER_CLASS_FISHERMAN      0x27
#define TRAINER_CLASS_TRIATHLETE     0x28
#define TRAINER_CLASS_DRAGON_TAMER   0x29
#define TRAINER_CLASS_NINJA_BOY      0x2a
#define TRAINER_CLASS_BATTLE_GIRL    0x2b
#define TRAINER_CLASS_PARASOL_LADY   0x2c
#define TRAINER_CLASS_SWIMMER_F      0x2d
#define TRAINER_CLASS_TWINS          0x2e
#define TRAINER_CLASS_SAILOR         0x2f
#define TRAINER_CLASS_COOLTRAINER_2  0x30
#define TRAINER_CLASS_MAGMA_ADMIN    0x31
#define TRAINER_CLASS_PKMN_TRAINER_3 0x32
#define TRAINER_CLASS_BUG_CATCHER    0x33
#define TRAINER_CLASS_PKMN_RANGER    0x34
#define TRAINER_CLASS_MAGMA_LEADER   0x35
#define TRAINER_CLASS_LASS           0x36
#define TRAINER_CLASS_YOUNG_COUPLE   0x37
#define TRAINER_CLASS_OLD_COUPLE     0x38
#define TRAINER_CLASS_SIS_AND_BRO    0x39
#define TRAINER_CLASS_SALON_MAIDEN   0x3a
#define TRAINER_CLASS_DOME_ACE       0x3b
#define TRAINER_CLASS_PALACE_MAVEN   0x3c
#define TRAINER_CLASS_ARENA_TYCOON   0x3d
#define TRAINER_CLASS_FACTORY_HEAD   0x3e
#define TRAINER_CLASS_PIKE_QUEEN     0x3f
#define TRAINER_CLASS_PYRAMID_KING   0x40
#define TRAINER_CLASS_PKMN_TRAINER_4 0x41

#define TRAINER_ENCOUNTER_MUSIC_MALE         0 // standard male encounter music
#define TRAINER_ENCOUNTER_MUSIC_FEMALE       1 // standard female encounter music
#define TRAINER_ENCOUNTER_MUSIC_GIRL         2 // used for male Tubers and Young Couples too
#define TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS   3
#define TRAINER_ENCOUNTER_MUSIC_INTENSE      4
#define TRAINER_ENCOUNTER_MUSIC_COOL         5
#define TRAINER_ENCOUNTER_MUSIC_AQUA         6
#define TRAINER_ENCOUNTER_MUSIC_MAGMA        7
#define TRAINER_ENCOUNTER_MUSIC_SWIMMER      8
#define TRAINER_ENCOUNTER_MUSIC_TWINS        9 // used for other trainer classes too
#define TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR  10
#define TRAINER_ENCOUNTER_MUSIC_HIKER       11 // used for other trainer classes too
#define TRAINER_ENCOUNTER_MUSIC_INTERVIEWER 12
#define TRAINER_ENCOUNTER_MUSIC_RICH        13 // Rich Boys and Gentlemen

#define F_TRAINER_FEMALE (1 << 7)

// All trainer parties specify the IV, level, and species for each Pokémon in the
// party. Some trainer parties also specify held items and custom moves for each
// Pokémon.
#define F_TRAINER_PARTY_CUSTOM_MOVESET (1 << 0)
#define F_TRAINER_PARTY_HELD_ITEM      (1 << 1)

#endif  // GUARD_TRAINERS_H