syntax = "proto3";

package com.igdb.proto;

import "google/protobuf/timestamp.proto";

option java_outer_classname = "Igdb";
//option java_multiple_files = true; // Must be true because of private access in files.
option optimize_for = CODE_SIZE;

message Count {
    int64 count = 1;
}

message MultiQueryResult {
    string name = 1;
    repeated bytes results = 2;
    int64 count = 3;
}

message MultiQueryResultArray {
    repeated MultiQueryResult result = 1;
}

message AgeRatingResult {
    repeated AgeRating ageratings = 1;
}

message AgeRating {
    uint64 id = 1;
    AgeRatingCategoryEnum category = 2; 
    repeated AgeRatingContentDescription content_descriptions = 3; 
    AgeRatingRatingEnum rating = 4; 
    string rating_cover_url = 5; 
    string synopsis = 6; 
    string checksum = 7; 
}


enum AgeRatingCategoryEnum {
    AGERATING_CATEGORY_NULL = 0;
    ESRB = 1;
    PEGI = 2;
    CERO = 3;
    USK = 4;
    GRAC = 5;
    CLASS_IND = 6;
    ACB = 7;
}


enum AgeRatingRatingEnum {
    AGERATING_RATING_NULL = 0;
    THREE = 1;
    SEVEN = 2;
    TWELVE = 3;
    SIXTEEN = 4;
    EIGHTEEN = 5;
    RP = 6;
    EC = 7;
    E = 8;
    E10 = 9;
    T = 10;
    M = 11;
    AO = 12;
    CERO_A = 13;
    CERO_B = 14;
    CERO_C = 15;
    CERO_D = 16;
    CERO_Z = 17;
    USK_0 = 18;
    USK_6 = 19;
    USK_12 = 20;
    USK_18 = 21;
    GRAC_ALL = 22;
    GRAC_TWELVE = 23;
    GRAC_FIFTEEN = 24;
    GRAC_EIGHTEEN = 25;
    GRAC_TESTING = 26;
    CLASS_IND_L = 27;
    CLASS_IND_TEN = 28;
    CLASS_IND_TWELVE = 29;
    CLASS_IND_FOURTEEN = 30;
    CLASS_IND_SIXTEEN = 31;
    CLASS_IND_EIGHTEEN = 32;
    ACB_G = 33;
    ACB_PG = 34;
    ACB_M = 35;
    ACB_MA15 = 36;
    ACB_R18 = 37;
    ACB_RC = 38;
}

message AgeRatingContentDescriptionResult {
    repeated AgeRatingContentDescription ageratingcontentdescriptions = 1;
}

message AgeRatingContentDescription {
    uint64 id = 1;
    AgeRatingRatingEnum category = 2; 
    string description = 3; 
    string checksum = 4; 
}

message AlternativeNameResult {
    repeated AlternativeName alternativenames = 1;
}

message AlternativeName {
    uint64 id = 1;
    string comment = 2; 
    Game game = 3; 
    string name = 4; 
    string checksum = 5; 
}

message ArtworkResult {
    repeated Artwork artworks = 1;
}

message Artwork {
    uint64 id = 1;
    bool alpha_channel = 2; 
    bool animated = 3; 
    Game game = 4; 
    int32 height = 5; 
    string image_id = 6; 
    string url = 7; 
    int32 width = 8; 
    string checksum = 9; 
}

message CharacterResult {
    repeated Character characters = 1;
}

message Character {
    uint64 id = 1;
    repeated string akas = 2; 
    string country_name = 3; 
    google.protobuf.Timestamp created_at = 4; 
    string description = 5; 
    repeated Game games = 6; 
    GenderGenderEnum gender = 7; 
    CharacterMugShot mug_shot = 8; 
    string name = 9; 
    string slug = 10; 
    CharacterSpeciesEnum species = 11; 
    google.protobuf.Timestamp updated_at = 12; 
    string url = 13; 
    string checksum = 14; 
}


enum GenderGenderEnum {
    MALE = 0;
    FEMALE = 1;
    OTHER = 2;
}


enum CharacterSpeciesEnum {
    CHARACTER_SPECIES_NULL = 0;
    HUMAN = 1;
    ALIEN = 2;
    ANIMAL = 3;
    ANDROID = 4;
    UNKNOWN = 5;
}

message CharacterMugShotResult {
    repeated CharacterMugShot charactermugshots = 1;
}

message CharacterMugShot {
    uint64 id = 1;
    bool alpha_channel = 2; 
    bool animated = 3; 
    int32 height = 4; 
    string image_id = 5; 
    string url = 6; 
    int32 width = 7; 
    string checksum = 8; 
}

message CollectionResult {
    repeated Collection collections = 1;
}

message Collection {
    uint64 id = 1;
    google.protobuf.Timestamp created_at = 2; 
    repeated Game games = 3; 
    string name = 4; 
    string slug = 5; 
    google.protobuf.Timestamp updated_at = 6; 
    string url = 7; 
    string checksum = 8; 
}

message CompanyResult {
    repeated Company companies = 1;
}

message Company {
    uint64 id = 1;
    google.protobuf.Timestamp change_date = 2; 
    DateFormatChangeDateCategoryEnum change_date_category = 3; 
    Company changed_company_id = 4; 
    int32 country = 5; 
    google.protobuf.Timestamp created_at = 6; 
    string description = 7; 
    repeated Game developed = 8; 
    CompanyLogo logo = 9; 
    string name = 10; 
    Company parent = 11; 
    repeated Game published = 12; 
    string slug = 13; 
    google.protobuf.Timestamp start_date = 14; 
    DateFormatChangeDateCategoryEnum start_date_category = 15; 
    google.protobuf.Timestamp updated_at = 16; 
    string url = 17; 
    repeated CompanyWebsite websites = 18; 
    string checksum = 19; 
}


enum DateFormatChangeDateCategoryEnum {
    YYYYMMMMDD = 0;
    YYYYMMMM = 1;
    YYYY = 2;
    YYYYQ1 = 3;
    YYYYQ2 = 4;
    YYYYQ3 = 5;
    YYYYQ4 = 6;
    TBD = 7;
}

message CompanyLogoResult {
    repeated CompanyLogo companylogos = 1;
}

message CompanyLogo {
    uint64 id = 1;
    bool alpha_channel = 2; 
    bool animated = 3; 
    int32 height = 4; 
    string image_id = 5; 
    string url = 6; 
    int32 width = 7; 
    string checksum = 8; 
}

message CompanyWebsiteResult {
    repeated CompanyWebsite companywebsites = 1;
}

message CompanyWebsite {
    uint64 id = 1;
    WebsiteCategoryEnum category = 2; 
    bool trusted = 3; 
    string url = 4; 
    string checksum = 5; 
}


enum WebsiteCategoryEnum {
    WEBSITE_CATEGORY_NULL = 0;
    WEBSITE_OFFICIAL = 1;
    WEBSITE_WIKIA = 2;
    WEBSITE_WIKIPEDIA = 3;
    WEBSITE_FACEBOOK = 4;
    WEBSITE_TWITTER = 5;
    WEBSITE_TWITCH = 6;
    WEBSITE_INSTAGRAM = 8;
    WEBSITE_YOUTUBE = 9;
    WEBSITE_IPHONE = 10;
    WEBSITE_IPAD = 11;
    WEBSITE_ANDROID = 12;
    WEBSITE_STEAM = 13;
    WEBSITE_REDDIT = 14;
    WEBSITE_ITCH = 15;
    WEBSITE_EPICGAMES = 16;
    WEBSITE_GOG = 17;
    WEBSITE_DISCORD = 18;
}

message CoverResult {
    repeated Cover covers = 1;
}

message Cover {
    uint64 id = 1;
    bool alpha_channel = 2; 
    bool animated = 3; 
    Game game = 4; 
    int32 height = 5; 
    string image_id = 6; 
    string url = 7; 
    int32 width = 8; 
    string checksum = 9; 
}

message ExternalGameResult {
    repeated ExternalGame externalgames = 1;
}

message ExternalGame {
    uint64 id = 1;
    ExternalGameCategoryEnum category = 2; 
    google.protobuf.Timestamp created_at = 3; 
    Game game = 4; 
    string name = 5; 
    string uid = 6; 
    google.protobuf.Timestamp updated_at = 7; 
    string url = 8; 
    int32 year = 9; 
    ExternalGameMediaEnum media = 10; 
    Platform platform = 11; 
    repeated int32 countries = 12; 
    string checksum = 13; 
}


enum ExternalGameCategoryEnum {
    EXTERNALGAME_CATEGORY_NULL = 0;
    EXTERNALGAME_STEAM = 1;
    EXTERNALGAME_GOG = 5;
    EXTERNALGAME_YOUTUBE = 10;
    EXTERNALGAME_MICROSOFT = 11;
    EXTERNALGAME_APPLE = 13;
    EXTERNALGAME_TWITCH = 14;
    EXTERNALGAME_ANDROID = 15;
    EXTERNALGAME_AMAZON_ASIN = 20;
    EXTERNALGAME_AMAZON_LUNA = 22;
    EXTERNALGAME_AMAZON_ADG = 23;
    EXTERNALGAME_EPIC_GAME_STORE = 26;
    EXTERNALGAME_OCULUS = 28;
}


enum ExternalGameMediaEnum {
    EXTERNALGAME_MEDIA_NULL = 0;
    EXTERNALGAME_DIGITAL = 1;
    EXTERNALGAME_PHYSICAL = 2;
}

message FranchiseResult {
    repeated Franchise franchises = 1;
}

message Franchise {
    uint64 id = 1;
    google.protobuf.Timestamp created_at = 2; 
    repeated Game games = 3; 
    string name = 4; 
    string slug = 5; 
    google.protobuf.Timestamp updated_at = 6; 
    string url = 7; 
    string checksum = 8; 
}

message GameResult {
    repeated Game games = 1;
}

message Game {
    uint64 id = 1;
    repeated AgeRating age_ratings = 2; 
    double aggregated_rating = 3; 
    int32 aggregated_rating_count = 4; 
    repeated AlternativeName alternative_names = 5; 
    repeated Artwork artworks = 6; 
    repeated Game bundles = 7; 
    GameCategoryEnum category = 8; 
    Collection collection = 9; 
    Cover cover = 10; 
    google.protobuf.Timestamp created_at = 11; 
    repeated Game dlcs = 12; 
    repeated Game expansions = 13; 
    repeated ExternalGame external_games = 14; 
    google.protobuf.Timestamp first_release_date = 15; 
    int32 follows = 16; 
    Franchise franchise = 17; 
    repeated Franchise franchises = 18; 
    repeated GameEngine game_engines = 19; 
    repeated GameMode game_modes = 20; 
    repeated Genre genres = 21; 
    int32 hypes = 22; 
    repeated InvolvedCompany involved_companies = 23; 
    repeated Keyword keywords = 24; 
    repeated MultiplayerMode multiplayer_modes = 25; 
    string name = 26; 
    Game parent_game = 27; 
    repeated Platform platforms = 28; 
    repeated PlayerPerspective player_perspectives = 29; 
    double rating = 30; 
    int32 rating_count = 31; 
    repeated ReleaseDate release_dates = 32; 
    repeated Screenshot screenshots = 33; 
    repeated Game similar_games = 34; 
    string slug = 35; 
    repeated Game standalone_expansions = 36; 
    GameStatusEnum status = 37; 
    string storyline = 38; 
    string summary = 39; 
    repeated int32 tags = 40; 
    repeated Theme themes = 41; 
    double total_rating = 42; 
    int32 total_rating_count = 43; 
    google.protobuf.Timestamp updated_at = 44; 
    string url = 45; 
    Game version_parent = 46; 
    string version_title = 47; 
    repeated GameVideo videos = 48; 
    repeated Website websites = 49; 
    string checksum = 50; 
    repeated Game remakes = 51; 
    repeated Game remasters = 52; 
    repeated Game expanded_games = 53; 
    repeated Game ports = 54; 
    repeated Game forks = 55; 
}


enum GameCategoryEnum {
    MAIN_GAME = 0;
    DLC_ADDON = 1;
    EXPANSION = 2;
    BUNDLE = 3;
    STANDALONE_EXPANSION = 4;
    MOD = 5;
    EPISODE = 6;
    SEASON = 7;
    REMAKE = 8;
    REMASTER = 9;
    EXPANDED_GAME = 10;
    PORT = 11;
    FORK = 12;
}


enum GameStatusEnum {
    RELEASED = 0;
    ALPHA = 2;
    BETA = 3;
    EARLY_ACCESS = 4;
    OFFLINE = 5;
    CANCELLED = 6;
    RUMORED = 7;
    DELISTED = 8;
}

message GameEngineResult {
    repeated GameEngine gameengines = 1;
}

message GameEngine {
    uint64 id = 1;
    repeated Company companies = 2; 
    google.protobuf.Timestamp created_at = 3; 
    string description = 4; 
    GameEngineLogo logo = 5; 
    string name = 6; 
    repeated Platform platforms = 7; 
    string slug = 8; 
    google.protobuf.Timestamp updated_at = 9; 
    string url = 10; 
    string checksum = 11; 
}

message GameEngineLogoResult {
    repeated GameEngineLogo gameenginelogos = 1;
}

message GameEngineLogo {
    uint64 id = 1;
    bool alpha_channel = 2; 
    bool animated = 3; 
    int32 height = 4; 
    string image_id = 5; 
    string url = 6; 
    int32 width = 7; 
    string checksum = 8; 
}

message GameModeResult {
    repeated GameMode gamemodes = 1;
}

message GameMode {
    uint64 id = 1;
    google.protobuf.Timestamp created_at = 2; 
    string name = 3; 
    string slug = 4; 
    google.protobuf.Timestamp updated_at = 5; 
    string url = 6; 
    string checksum = 7; 
}

message GameVersionResult {
    repeated GameVersion gameversions = 1;
}

message GameVersion {
    uint64 id = 1;
    google.protobuf.Timestamp created_at = 2; 
    repeated GameVersionFeature features = 3; 
    Game game = 4; 
    repeated Game games = 5; 
    google.protobuf.Timestamp updated_at = 6; 
    string url = 7; 
    string checksum = 8; 
}

message GameVersionFeatureResult {
    repeated GameVersionFeature gameversionfeatures = 1;
}

message GameVersionFeature {
    uint64 id = 1;
    GameVersionFeatureCategoryEnum category = 2; 
    string description = 3; 
    int32 position = 4; 
    string title = 5; 
    repeated GameVersionFeatureValue values = 6; 
    string checksum = 7; 
}


enum GameVersionFeatureCategoryEnum {
    BOOLEAN = 0;
    DESCRIPTION = 1;
}

message GameVersionFeatureValueResult {
    repeated GameVersionFeatureValue gameversionfeaturevalues = 1;
}

message GameVersionFeatureValue {
    uint64 id = 1;
    Game game = 2; 
    GameVersionFeature game_feature = 3; 
    GameVersionFeatureValueIncludedFeatureEnum included_feature = 4; 
    string note = 5; 
    string checksum = 6; 
}


enum GameVersionFeatureValueIncludedFeatureEnum {
    NOT_INCLUDED = 0;
    INCLUDED = 1;
    PRE_ORDER_ONLY = 2;
}

message GameVideoResult {
    repeated GameVideo gamevideos = 1;
}

message GameVideo {
    uint64 id = 1;
    Game game = 2; 
    string name = 3; 
    string video_id = 4; 
    string checksum = 5; 
}

message GenreResult {
    repeated Genre genres = 1;
}

message Genre {
    uint64 id = 1;
    google.protobuf.Timestamp created_at = 2; 
    string name = 3; 
    string slug = 4; 
    google.protobuf.Timestamp updated_at = 5; 
    string url = 6; 
    string checksum = 7; 
}

message InvolvedCompanyResult {
    repeated InvolvedCompany involvedcompanies = 1;
}

message InvolvedCompany {
    uint64 id = 1;
    Company company = 2; 
    google.protobuf.Timestamp created_at = 3; 
    bool developer = 4; 
    Game game = 5; 
    bool porting = 6; 
    bool publisher = 7; 
    bool supporting = 8; 
    google.protobuf.Timestamp updated_at = 9; 
    string checksum = 10; 
}

message KeywordResult {
    repeated Keyword keywords = 1;
}

message Keyword {
    uint64 id = 1;
    google.protobuf.Timestamp created_at = 2; 
    string name = 3; 
    string slug = 4; 
    google.protobuf.Timestamp updated_at = 5; 
    string url = 6; 
    string checksum = 7; 
}

message MultiplayerModeResult {
    repeated MultiplayerMode multiplayermodes = 1;
}

message MultiplayerMode {
    uint64 id = 1;
    bool campaigncoop = 2; 
    bool dropin = 3; 
    Game game = 4; 
    bool lancoop = 5; 
    bool offlinecoop = 6; 
    int32 offlinecoopmax = 7; 
    int32 offlinemax = 8; 
    bool onlinecoop = 9; 
    int32 onlinecoopmax = 10; 
    int32 onlinemax = 11; 
    Platform platform = 12; 
    bool splitscreen = 13; 
    bool splitscreenonline = 14; 
    string checksum = 15; 
}

message PlatformResult {
    repeated Platform platforms = 1;
}

message Platform {
    uint64 id = 1;
    string abbreviation = 2; 
    string alternative_name = 3; 
    PlatformCategoryEnum category = 4; 
    google.protobuf.Timestamp created_at = 5; 
    int32 generation = 6; 
    string name = 7; 
    PlatformLogo platform_logo = 8; 
    PlatformFamily platform_family = 9; 
    string slug = 10; 
    string summary = 11; 
    google.protobuf.Timestamp updated_at = 12; 
    string url = 13; 
    repeated PlatformVersion versions = 14; 
    repeated PlatformWebsite websites = 15; 
    string checksum = 16; 
}


enum PlatformCategoryEnum {
    PLATFORM_CATEGORY_NULL = 0;
    CONSOLE = 1;
    ARCADE = 2;
    PLATFORM = 3;
    OPERATING_SYSTEM = 4;
    PORTABLE_CONSOLE = 5;
    COMPUTER = 6;
}

message PlatformFamilyResult {
    repeated PlatformFamily platformfamilies = 1;
}

message PlatformFamily {
    uint64 id = 1;
    string name = 2; 
    string slug = 3; 
    string checksum = 4; 
}

message PlatformLogoResult {
    repeated PlatformLogo platformlogos = 1;
}

message PlatformLogo {
    uint64 id = 1;
    bool alpha_channel = 2; 
    bool animated = 3; 
    int32 height = 4; 
    string image_id = 5; 
    string url = 6; 
    int32 width = 7; 
    string checksum = 8; 
}

message PlatformVersionResult {
    repeated PlatformVersion platformversions = 1;
}

message PlatformVersion {
    uint64 id = 1;
    repeated PlatformVersionCompany companies = 2; 
    string connectivity = 3; 
    string cpu = 4; 
    string graphics = 5; 
    PlatformVersionCompany main_manufacturer = 6; 
    string media = 7; 
    string memory = 8; 
    string name = 9; 
    string online = 10; 
    string os = 11; 
    string output = 12; 
    PlatformLogo platform_logo = 13; 
    repeated PlatformVersionReleaseDate platform_version_release_dates = 14; 
    string resolutions = 15; 
    string slug = 16; 
    string sound = 17; 
    string storage = 18; 
    string summary = 19; 
    string url = 20; 
    string checksum = 21; 
}

message PlatformVersionCompanyResult {
    repeated PlatformVersionCompany platformversioncompanies = 1;
}

message PlatformVersionCompany {
    uint64 id = 1;
    string comment = 2; 
    Company company = 3; 
    bool developer = 4; 
    bool manufacturer = 5; 
    string checksum = 6; 
}

message PlatformVersionReleaseDateResult {
    repeated PlatformVersionReleaseDate platformversionreleasedates = 1;
}

message PlatformVersionReleaseDate {
    uint64 id = 1;
    DateFormatChangeDateCategoryEnum category = 2; 
    google.protobuf.Timestamp created_at = 3; 
    google.protobuf.Timestamp date = 4; 
    string human = 5; 
    int32 m = 6; 
    PlatformVersion platform_version = 7; 
    RegionRegionEnum region = 8; 
    google.protobuf.Timestamp updated_at = 9; 
    int32 y = 10; 
    string checksum = 11; 
}


enum RegionRegionEnum {
    REGION_REGION_NULL = 0;
    EUROPE = 1;
    NORTH_AMERICA = 2;
    AUSTRALIA = 3;
    NEW_ZEALAND = 4;
    JAPAN = 5;
    CHINA = 6;
    ASIA = 7;
    WORLDWIDE = 8;
    KOREA = 9;
    BRAZIL = 10;
}

message PlatformWebsiteResult {
    repeated PlatformWebsite platformwebsites = 1;
}

message PlatformWebsite {
    uint64 id = 1;
    WebsiteCategoryEnum category = 2; 
    bool trusted = 3; 
    string url = 4; 
    string checksum = 5; 
}

message PlayerPerspectiveResult {
    repeated PlayerPerspective playerperspectives = 1;
}

message PlayerPerspective {
    uint64 id = 1;
    google.protobuf.Timestamp created_at = 2; 
    string name = 3; 
    string slug = 4; 
    google.protobuf.Timestamp updated_at = 5; 
    string url = 6; 
    string checksum = 7; 
}

message ReleaseDateResult {
    repeated ReleaseDate releasedates = 1;
}

message ReleaseDate {
    uint64 id = 1;
    DateFormatChangeDateCategoryEnum category = 2; 
    google.protobuf.Timestamp created_at = 3; 
    google.protobuf.Timestamp date = 4; 
    Game game = 5; 
    string human = 6; 
    int32 m = 7; 
    Platform platform = 8; 
    RegionRegionEnum region = 9; 
    google.protobuf.Timestamp updated_at = 10; 
    int32 y = 11; 
    string checksum = 12; 
}

message ScreenshotResult {
    repeated Screenshot screenshots = 1;
}

message Screenshot {
    uint64 id = 1;
    bool alpha_channel = 2; 
    bool animated = 3; 
    Game game = 4; 
    int32 height = 5; 
    string image_id = 6; 
    string url = 7; 
    int32 width = 8; 
    string checksum = 9; 
}

message SearchResult {
    repeated Search searches = 1;
}

message Search {
    uint64 id = 1;
    string alternative_name = 2; 
    Character character = 3; 
    Collection collection = 4; 
    Company company = 5; 
    string description = 6; 
    Game game = 7; 
    string name = 8; 
    Platform platform = 9; 
    google.protobuf.Timestamp published_at = 10; 
    TestDummy test_dummy = 11; 
    Theme theme = 12; 
    string checksum = 13; 
}

message TestDummyResult {
    repeated TestDummy testdummies = 1;
}

message TestDummy {
    uint64 id = 1;
    bool bool_value = 2; 
    google.protobuf.Timestamp created_at = 3; 
    TestDummyEnumTestEnum enum_test = 4; 
    double float_value = 5; 
    Game game = 6; 
    repeated int32 integer_array = 7; 
    int32 integer_value = 8; 
    string name = 9; 
    int32 new_integer_value = 10; 
    bool private = 11; 
    string slug = 12; 
    repeated string string_array = 13; 
    repeated TestDummy test_dummies = 14; 
    TestDummy test_dummy = 15; 
    google.protobuf.Timestamp updated_at = 16; 
    string url = 17; 
    string checksum = 18; 
}


enum TestDummyEnumTestEnum {
    TESTDUMMY_ENUM_TEST_NULL = 0;
    ENUM1 = 1;
    ENUM2 = 2;
}

message ThemeResult {
    repeated Theme themes = 1;
}

message Theme {
    uint64 id = 1;
    google.protobuf.Timestamp created_at = 2; 
    string name = 3; 
    string slug = 4; 
    google.protobuf.Timestamp updated_at = 5; 
    string url = 6; 
    string checksum = 7; 
}

message WebsiteResult {
    repeated Website websites = 1;
}

message Website {
    uint64 id = 1;
    WebsiteCategoryEnum category = 2; 
    Game game = 3; 
    bool trusted = 4; 
    string url = 5; 
    string checksum = 6; 
}
