// Copyright 2010-2015, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//     * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

syntax = "proto2";

package mozc.user_dictionary;

option java_outer_classname = "ProtoUserDictionaryStorage";
option java_package = "org.mozc.android.inputmethod.japanese.protobuf";

message UserDictionary {
  enum PosType {
    NOUN = 1;  // "名詞"
    ABBREVIATION = 2;  // "短縮よみ"
    SUGGESTION_ONLY = 3;  // "サジェストのみ"
    PROPER_NOUN = 4;  // "固有名詞"
    PERSONAL_NAME = 5;  // "人名"
    FAMILY_NAME = 6;  // "姓"
    FIRST_NAME = 7;  // "名"
    ORGANIZATION_NAME = 8;  // "組織"
    PLACE_NAME = 9;  // "地名"
    SA_IRREGULAR_CONJUGATION_NOUN = 10;  // "名詞サ変"
    ADJECTIVE_VERBAL_NOUN = 11;  // "名詞形動"
    NUMBER = 12;  // "数"
    ALPHABET = 13;  // "アルファベット"
    SYMBOL = 14;  // "記号"
    EMOTICON = 15;  // "顔文字"

    ADVERB = 16;  // "副詞"
    PRENOUN_ADJECTIVAL = 17;  // "連体詞"
    CONJUNCTION = 18;  // "接続詞"
    INTERJECTION = 19;  // "感動詞"

    PREFIX = 20;  // "接頭語"
    COUNTER_SUFFIX = 21;  // "助数詞"
    GENERIC_SUFFIX = 22;  // "接尾一般"
    PERSON_NAME_SUFFIX = 23;  // "接尾人名"
    PLACE_NAME_SUFFIX = 24;  // "接尾地名"

    WA_GROUP1_VERB = 25;  // "動詞ワ行五段"
    KA_GROUP1_VERB = 26;  // "動詞カ行五段"
    SA_GROUP1_VERB = 27;  // "動詞サ行五段"
    TA_GROUP1_VERB = 28;  // "動詞タ行五段"
    NA_GROUP1_VERB = 29;  // "動詞ナ行五段"
    MA_GROUP1_VERB = 30;  // "動詞マ行五段"
    RA_GROUP1_VERB = 31;  // "動詞ラ行五段"
    GA_GROUP1_VERB = 32;  // "動詞ガ行五段"
    BA_GROUP1_VERB = 33;  // "動詞バ行五段"
    HA_GROUP1_VERB = 34;  // "動詞ハ行四段"
    GROUP2_VERB = 35;  // "動詞一段"
    KURU_GROUP3_VERB = 36;  // "動詞カ変"
    SURU_GROUP3_VERB = 37;  // "動詞サ変"
    ZURU_GROUP3_VERB = 38;  // "動詞ザ変"
    RU_GROUP3_VERB = 39;  // "動詞ラ変"

    ADJECTIVE = 40;  // "形容詞"
    SENTENCE_ENDING_PARTICLE = 41;  // "終助詞"
    PUNCTUATION = 42;  // "句読点"
    FREE_STANDING_WORD = 43;  // "独立語"

    SUPPRESSION_WORD = 44;  // "抑制単語"
  };

  // ID of this dictionary
  optional uint64 id = 1 [ default = 0 ];

  // set false if this dictionary is not used.
  // Even if |enabled| is false, the dictionary
  // it self is visible to user.
  optional bool enabled = 2 [ default = true ];

  // name of dictionary
  optional string name = 3 [ default = "" ];

  // entry of each word
  message Entry {
    optional string key     = 1 [ default = "" ];
    optional string value   = 2 [ default = "" ];
    // Do NOT use tag number '3' in this proto. Please see below.
    optional string comment = 4 [ default = "" ];

    // Historically we used to use tag number '3' for POS in string format.
    // In order to switch it to enum based POS, we removed (deprecated) the
    // tag number '3' field and created another field numbered '5'.
    optional PosType pos    = 5;

    // set true if this entry is removed.
    // This flag is used for cloud sync feature.
    // Cloud sync feature is already deprecated and this flag is only
    // used to convert sync dictionary to normal dictionary.
    optional bool  removed  = 10 [ default = false ];

    // set true if this entry is automatically registered
    // by converter.
    optional bool auto_registered = 11 [ default = false ];
  };

  repeated Entry entries = 4;

  // set true if this dictionary is removed.
  // This flag is used for cloud sync feature.
  // Cloud sync feature is already deprecated and this flag is only
  // used to convert sync dictionary to normal dictionary.
  optional bool removed = 5 [ default = false ];

  // This flag is used for cloud sync feature.
  // Cloud sync feature is already deprecated and this flag is only
  // used to convert sync dictionary to normal dictionary.
  optional bool syncable = 6 [ default = false ];
};

message UserDictionaryStorage {
  // version of user dictionary
  optional int32 version = 1 [ default = 0 ];

  // dictionary body
  repeated UserDictionary dictionaries = 2;

  enum StorageType {
    SNAPSHOT = 1;   // This storage is a snapshot.
    UPDATE = 2;     // This storage is a diff of some snapshots.
  };

  optional StorageType storage_type = 10 [ default = SNAPSHOT ];
};

message UserDictionaryCommand {
  enum CommandType {
    // Does nothing.
    NO_OPERATION = 0;

    // Unlink the user dictionary file if necessary.
    // We can do this operation without creating a session.
    // This operation is introduced as a last resort to clean up
    // user dictionary, so it *forces* to unlink the file regardless
    // of the current user dictionary session status.
    CLEAR_STORAGE = 1;

    // Creates a new session, and returns its id via
    // UserDictionaryCommandStatus::session_id.
    CREATE_SESSION = 2;

    // Deletes the session identified by session_id.
    DELETE_SESSION = 3;

    // Sets the default dictionary name. It will be used when
    // ensure_non_empty_storage is enabled and the operation supporting the
    // flag is invoked.
    SET_DEFAULT_DICTIONARY_NAME = 4;

    // Checks if the session is currently undoable or not.
    CHECK_UNDOABILITY = 5;

    // Undoes the last operation.
    UNDO = 6;

    // Loads from local storage.
    LOAD = 7;

    // Saves to local storage.
    SAVE = 8;

    // Returns a list of name and dictionary-id pairs.
    // They are filled in the form of UserDictionary without any entries
    // in UserDictionaryCommandStatus::storage.
    GET_USER_DICTIONARY_NAME_LIST = 9;

    // Returns the number of entries in the dictionary with the
    // given dictionary_id.
    GET_ENTRY_SIZE = 10;

    // Use GET_ENTRIES instead.
    OBSOLETE_GET_ENTRY = 11;

    // Returns if it is possible to add new dictionary or not.
    // The result is returned by using status code.
    CHECK_NEW_DICTIONARY_AVAILABILITY = 12;

    // Creates a new dictionary with the dictionary_name.
    CREATE_DICTIONARY = 13;

    // Deletes the dictionary with the given dictionary_id.
    DELETE_DICTIONARY = 14;

    // Renames the dictionary with the given dictionary_id to dictionary_name.
    RENAME_DICTIONARY = 15;

    // Returns if it is possible to add new entry to the dictionary
    // with the given dictionary_id or not.
    CHECK_NEW_ENTRY_AVAILABILITY = 16;

    // Adds an entry to the dictionary with the given dictionary_id.
    // Added entry should be located at the end of the dictionary, and
    // the data should be passed via entry field.
    ADD_ENTRY = 17;

    // Edits an entry in the dictionary with the given dictionary_id.
    // The new data should be passed via entry.
    // The edit target should be specified via entry_index(0).
    EDIT_ENTRY = 18;

    // Deletes entries in the dictionary with the given dictionary_id.
    // The target entries should be specified based on index in entry_index.
    DELETE_ENTRY = 19;

    // Imports entries from the given data into a dictionary.
    // There are two ways to specify the dictionary:
    // 1) set dictionary_id for the dictionary
    // 2) set dictionary_name to create a new dictionary with the name.
    IMPORT_DATA = 20;

    // Gets the entire UserDictionaryStorage data.
    // Note: The result of this command could be too large for IPC, which has a
    // size limitation of the response data.
    GET_STORAGE = 21;

    // Returns entries in the dictionary specified by dictionary_id.
    // The position of the entry should be specified via entry_index().
    GET_ENTRIES = 22;
  };

  required CommandType type = 1;
  optional uint64 session_id = 2;
  optional uint64 dictionary_id = 3;
  optional string dictionary_name = 4;
  repeated int32 entry_index = 5;
  optional UserDictionary.Entry entry = 6;
  optional string data = 7;
  optional bool ensure_non_empty_storage = 8;
};

message UserDictionaryCommandStatus {
  // Note: this status code is now temporary assgined.
  // It may be updated (incl. re-numbering) to organize the code.
  // I.e., the code shouldn't be saved in serialized format for now.
  // TODO(hidehiko): Re-organize and re-number the enum values,
  //   after we check all necessary codes in.
  enum Status {
    // Note: SUCCEEDED is conflicting Windows MACRO.
    USER_DICTIONARY_COMMAND_SUCCESS = 1;
    UNKNOWN_ERROR = 2;

    UNKNOWN_COMMAND = 3;
    INVALID_ARGUMENT = 4;

    UNKNOWN_SESSION_ID = 5;

    FILE_NOT_FOUND = 6;
    INVALID_FILE_FORMAT = 7;

    // Note: currently if we recieve this error status,
    // the file is actually saved.
    FILE_SIZE_LIMIT_EXCEEDED = 8;
    DICTIONARY_SIZE_LIMIT_EXCEEDED = 9;
    ENTRY_SIZE_LIMIT_EXCEEDED = 10;

    UNKNOWN_DICTIONARY_ID = 11;
    ENTRY_INDEX_OUT_OF_RANGE = 12;

    // Errors for dictionary names.
    DICTIONARY_NAME_EMPTY = 13;
    DICTIONARY_NAME_TOO_LONG = 14;
    DICTIONARY_NAME_CONTAINS_INVALID_CHARACTER = 15;
    DICTIONARY_NAME_DUPLICATED = 16;

    // Errors for entry data.
    READING_EMPTY = 17;
    READING_TOO_LONG = 18;
    READING_CONTAINS_INVALID_CHARACTER = 19;
    WORD_EMPTY = 20;
    WORD_TOO_LONG = 21;
    WORD_CONTAINS_INVALID_CHARACTER = 22;
    INVALID_POS_TYPE = 23;
    COMMENT_TOO_LONG = 24;
    COMMENT_CONTAINS_INVALID_CHARACTER = 25;

    // Errors for importing.
    IMPORT_TOO_MANY_WORDS = 26;
    IMPORT_INVALID_ENTRIES = 27;

    NO_UNDO_HISTORY = 28;
  };

  required Status status = 1;
  optional uint64 session_id = 2;
  optional UserDictionaryStorage storage = 3;
  // Use entries field instead.
  optional UserDictionary.Entry OBSOLETE_entry = 4;
  optional uint64 dictionary_id = 5;
  optional uint32 entry_size = 6;
  repeated UserDictionary.Entry entries = 7;
};
