package WoW::Armory::Class::Character;

use strict;
use warnings;

use WoW::Armory::Class::Guild;

########################################################################
package WoW::Armory::Class::Character::Titles;

use base 'WoW::Armory::Class';

use constant FIELDS => [
    'id', 'name', 'selected'
];

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::Talents::Talents::Spell;

use base 'WoW::Armory::Class';

use constant FIELDS => [
    'castTime', 'cooldown', 'description', 'icon', 'id', 'name', 'powerCost',
    'range', 'subtext'
];

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::Talents::Talents;

use base 'WoW::Armory::Class';

use constant FIELDS => [
    'column', 'tier'
];

use constant BLESSED_FIELDS =>
{
    'spell' => 'WoW::Armory::Class::Character::Talents::Talents::Spell',
};

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::Talents::Spec;

use base 'WoW::Armory::Class';

use constant FIELDS => [
    'backgroundImage', 'description', 'icon', 'name', 'order', 'role'
];

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::Talents::Glyphs::Glyph;

use base 'WoW::Armory::Class';

use constant FIELDS => [
    'glyph', 'icon', 'item', 'name'
];

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::Talents::Glyphs;

use base 'WoW::Armory::Class';

use constant LIST_FIELDS =>
{
    'major' => 'WoW::Armory::Class::Character::Talents::Glyphs::Glyph',
    'minor' => 'WoW::Armory::Class::Character::Talents::Glyphs::Glyph',
};

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::Talents;

use base 'WoW::Armory::Class';

use constant FIELDS => [
    'calcGlyph', 'calcSpec', 'calcTalent', 'selected'
];

use constant BLESSED_FIELDS =>
{
    'glyphs'    => 'WoW::Armory::Class::Character::Talents::Glyphs',
    'spec'      => 'WoW::Armory::Class::Character::Talents::Spec',
};

use constant LIST_FIELDS =>
{
    'talents'   => 'WoW::Armory::Class::Character::Talents::Talents',
};

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::Stats;

use base 'WoW::Armory::Class';

use constant FIELDS => [
    'agi', 'armor', 'attackPower', 'block', 'blockRating', 'crit', 'critRating',
    'dodge', 'dodgeRating', 'expertiseRating', 'hasteRating', 'health', 'hitPercent',
    'hitRating', 'int', 'mainHandDmgMax', 'mainHandDmgMin', 'mainHandDps',
    'mainHandExpertise', 'mainHandSpeed', 'mana5', 'mana5Combat', 'mastery',
    'masteryRating', 'offHandDmgMax', 'offHandDmgMin', 'offHandDps', 'offHandExpertise',
    'offHandSpeed', 'parry', 'parryRating', 'power', 'powerType', 'pvpPower',
    'pvpPowerRating', 'pvpResilience', 'pvpResilienceRating', 'rangedAttackPower',
    'rangedCrit', 'rangedCritRating', 'rangedDmgMax', 'rangedDmgMin', 'rangedDps',
    'rangedExpertise', 'rangedHitPercent', 'rangedHitRating', 'rangedSpeed',
    'spellCrit', 'spellCritRating', 'spellHitPercent', 'spellHitRating', 'spellPen',
    'spellPower', 'spr', 'sta', 'str'
];

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::Reputation;

use base 'WoW::Armory::Class';

use constant FIELDS => [
    'id', 'max', 'name', 'standing', 'value'
];

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::Pvp::RatedBattlegrounds::Battlegrounds;

use base 'WoW::Armory::Class';

use constant FIELDS => [
    'name', 'played', 'won'
];

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::Pvp::RatedBattlegrounds;

use base 'WoW::Armory::Class';

use constant FIELDS => [
    'personalRating'
];

use constant LIST_FIELDS =>
{
    'battlegrounds' => 'WoW::Armory::Class::Character::Pvp::RatedBattlegrounds::Battlegrounds',
};

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::Pvp;

use base 'WoW::Armory::Class';

use constant FIELDS => [
    'arenaTeams', 'totalHonorableKills'
];

use constant BLESSED_FIELDS =>
{
    'ratedBattlegrounds'    => 'WoW::Armory::Class::Character::Pvp::RatedBattlegrounds',
};

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::Progression::Raids::Bosses;

use base 'WoW::Armory::Class';

use constant FIELDS => [
    'heroicKills', 'id', 'name', 'normalKills'
];

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::Progression::Raids;

use base 'WoW::Armory::Class';

use constant FIELDS => [
    'heroic', 'id', 'name', 'normal'
];

use constant LIST_FIELDS =>
{
    'bosses'    => 'WoW::Armory::Class::Character::Progression::Raids::Bosses',
};

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::Progression;

use base 'WoW::Armory::Class';

use constant LIST_FIELDS =>
{
    'raids' => 'WoW::Armory::Class::Character::Progression::Raids',
};

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::Professions::Profession;

use base 'WoW::Armory::Class';

use constant FIELDS => [
    'icon', 'id', 'max', 'name', 'rank', 'recipes'
];

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::Professions;

use base 'WoW::Armory::Class';

use constant LIST_FIELDS =>
{
    'primary'   => 'WoW::Armory::Class::Character::Professions::Profession',
    'secondary' => 'WoW::Armory::Class::Character::Professions::Profession',
};

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::Pets::Collected::Stats;

use base 'WoW::Armory::Class';

use constant FIELDS => [
    'breedId', 'health', 'level', 'petQualityId', 'power', 'speciesId', 'speed'
];

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::Pets::Collected;

use base 'WoW::Armory::Class';

use constant FIELDS => [
    'battlePetId', 'canBattle', 'creatureId', 'creatureName', 'icon', 'isFavorite',
    'itemId', 'name', 'qualityId', 'spellId'
];

use constant BLESSED_FIELDS =>
{
    'stats' => 'WoW::Armory::Class::Character::Pets::Collected::Stats',
};

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::Pets;

use base 'WoW::Armory::Class';

use constant FIELDS => [
    'numCollected', 'numNotCollected'
];

use constant LIST_FIELDS =>
{
    'collected' => 'WoW::Armory::Class::Character::Pets::Collected',
};

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::PetSlots;

use base 'WoW::Armory::Class';

use constant FIELDS => [
    'abilities', 'battlePetId', 'isEmpty', 'isLocked', 'slot'
];

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::Mounts::Collected;

use base 'WoW::Armory::Class';

use constant FIELDS => [
    'creatureId', 'icon', 'isAquatic', 'isFlying', 'isGround', 'isJumping',
    'itemId', 'name', 'qualityId', 'spellId'
];

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::Mounts;

use base 'WoW::Armory::Class';

use constant FIELDS => [
    'numCollected', 'numNotCollected'
];

use constant LIST_FIELDS =>
{
    'collected' => 'WoW::Armory::Class::Character::Mounts::Collected',
};

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::Items::Item::TooltipParams;

use base 'WoW::Armory::Class';

use constant FIELDS => [
    'enchant', 'reforge'
];

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::Items::Item;

use base 'WoW::Armory::Class';

use constant FIELDS => [
    'icon', 'id', 'name', 'quality'
];

use constant BLESSED_FIELDS =>
{
    'tooltipParams' => 'WoW::Armory::Class::Character::Items::Item::TooltipParams',
};

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::Items;

use base 'WoW::Armory::Class';

use constant FIELDS => [
    'averageItemLevel', 'averageItemLevelEquipped'
];

use constant BLESSED_FIELDS =>
{
    'back'      => 'WoW::Armory::Class::Character::Items::Item',
    'chest'     => 'WoW::Armory::Class::Character::Items::Item',
    'feet'      => 'WoW::Armory::Class::Character::Items::Item',
    'finger1'   => 'WoW::Armory::Class::Character::Items::Item',
    'finger2'   => 'WoW::Armory::Class::Character::Items::Item',
    'hands'     => 'WoW::Armory::Class::Character::Items::Item',
    'head'      => 'WoW::Armory::Class::Character::Items::Item',
    'legs'      => 'WoW::Armory::Class::Character::Items::Item',
    'mainHand'  => 'WoW::Armory::Class::Character::Items::Item',
    'neck'      => 'WoW::Armory::Class::Character::Items::Item',
    'shirt'     => 'WoW::Armory::Class::Character::Items::Item',
    'shoulder'  => 'WoW::Armory::Class::Character::Items::Item',
    'trinket1'  => 'WoW::Armory::Class::Character::Items::Item',
    'trinket2'  => 'WoW::Armory::Class::Character::Items::Item',
    'waist'     => 'WoW::Armory::Class::Character::Items::Item',
    'wrist'     => 'WoW::Armory::Class::Character::Items::Item',
};

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::HunterPets;

use base 'WoW::Armory::Class';

use constant FIELDS => [
    'calcSpec', 'creature', 'familyId', 'familyName', 'name', 'selected', 'slot'
];

use constant BLESSED_FIELDS =>
{
    'spec'  => 'WoW::Armory::Class::Character::Talents::Spec',
};

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::Guild;

use base 'WoW::Armory::Class';

use constant FIELDS => [
    'achievementPoints', 'battlegroup', 'level', 'members', 'name', 'realm'
];

use constant BLESSED_FIELDS =>
{
    'emblem'    => 'WoW::Armory::Class::Guild::Emblem',
};

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::Feed::Criteria;

use base 'WoW::Armory::Class';

use constant FIELDS => [
    'description', 'id', 'max', 'orderIndex'
];

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::Feed::Achievement;

use base 'WoW::Armory::Class';

use constant FIELDS => [
    'accountWide', 'description', 'factionId', 'icon', 'id', 'points', 'reward',
    'title'
];

use constant LIST_FIELDS =>
{
    'criteria'      => 'WoW::Armory::Class::Character::Feed::Criteria',
    'rewardItems'   => 'WoW::Armory::Class::Character::Items::Item',
};

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::Feed;

use base 'WoW::Armory::Class';

use constant FIELDS => [
    'featOfStrength', 'itemId', 'name', 'quantity', 'timestamp', 'type'
];

use constant BLESSED_FIELDS =>
{
    'achievement'   => 'WoW::Armory::Class::Character::Feed::Achievement',
    'criteria'      => 'WoW::Armory::Class::Character::Feed::Criteria',
};

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::Appearance;

use base 'WoW::Armory::Class';

use constant FIELDS => [
    'faceVariation', 'featureVariation', 'hairColor', 'hairVariation', 'showCloak',
    'showHelm', 'skinColor'
];

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character::Achievements;

use base 'WoW::Armory::Class';

use constant FIELDS => [
    'achievementsCompleted', 'achievementsCompletedTimestamp', 'criteria',
    'criteriaCreated', 'criteriaQuantity', 'criteriaTimestamp'
];

__PACKAGE__->mk_accessors;

########################################################################
package WoW::Armory::Class::Character;

use base 'WoW::Armory::Class';

use constant FIELDS => [
    'achievementPoints', 'battlegroup', 'calcClass', 'class', 'gender', 'lastModified',
    'level', 'name', 'quests', 'race', 'realm', 'thumbnail'
];

use constant BLESSED_FIELDS =>
{
    'achievements'  => 'WoW::Armory::Class::Character::Achievements',
    'appearance'    => 'WoW::Armory::Class::Character::Appearance',
    'guild'         => 'WoW::Armory::Class::Character::Guild',
    'items'         => 'WoW::Armory::Class::Character::Items',
    'mounts'        => 'WoW::Armory::Class::Character::Mounts',
    'pets'          => 'WoW::Armory::Class::Character::Pets',
    'professions'   => 'WoW::Armory::Class::Character::Professions',
    'progression'   => 'WoW::Armory::Class::Character::Progression',
    'pvp'           => 'WoW::Armory::Class::Character::Pvp',
    'stats'         => 'WoW::Armory::Class::Character::Stats',
};

use constant LIST_FIELDS =>
{
    'feed'          => 'WoW::Armory::Class::Character::Feed',
    'hunterPets'    => 'WoW::Armory::Class::Character::HunterPets',
    'petSlots'      => 'WoW::Armory::Class::Character::PetSlots',
    'reputation'    => 'WoW::Armory::Class::Character::Reputation',
    'talents'       => 'WoW::Armory::Class::Character::Talents',
    'titles'        => 'WoW::Armory::Class::Character::Titles',
};

__PACKAGE__->mk_accessors;

1;