// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// Protocol buffer definitions for the user's contacts.

syntax = "proto2";

option optimize_for = LITE_RUNTIME;

package contacts;

// A contact, roughly based on the GData Contact kind:
// https://developers.google.com/gdata/docs/2.0/elements#gdContactKind
// All strings are UTF-8 with Unicode byte order marks stripped out.
message Contact {
  // Next ID to use: 16

  // Provider-assigned unique identifier.
  optional string contact_id = 1;

  // Last time at which this contact was updated within the upstream provider,
  // as given by base::Time::ToInternalValue().
  optional int64 update_time = 2;

  // Has the contact been deleted recently within the upstream provider?
  optional bool deleted = 3 [default = false];

  // Affinity between the user and this contact, in the range [0.0, 1.0].
  // Unset if the affinity is unknown.
  optional float affinity = 15;

  // Taken from https://developers.google.com/gdata/docs/2.0/elements#gdName.
  optional string full_name = 4;
  optional string given_name = 5;
  optional string additional_name = 6;
  optional string family_name = 7;
  optional string name_prefix = 8;
  optional string name_suffix = 9;

  // Raw photo data as supplied by the provider.  This data is untrusted and
  // must be decoded within a sandbox by e.g. ImageDecoder before being used.
  // Unset if no photo is available.
  optional bytes raw_untrusted_photo = 10;

  // Describes an address-like message's type.
  message AddressType {
    // Next ID to use: 3
    enum Relation {
      HOME = 0;
      WORK = 1;
      MOBILE = 2;
      OTHER = 3;
    }
    optional Relation relation = 1 [default = OTHER];
    optional string label = 2;
  }

  message EmailAddress {
    // Next ID to use: 4
    optional string address = 1;
    optional AddressType type = 2;
    optional bool primary = 3 [default = false];
  }
  repeated EmailAddress email_addresses = 11;

  message PhoneNumber {
    // Next ID to use: 4
    optional string number = 1;
    optional AddressType type = 2;
    optional bool primary = 3 [default = false];
  }
  repeated PhoneNumber phone_numbers = 12;

  message PostalAddress {
    // Next ID to use: 4
    optional string address = 1;
    optional AddressType type = 2;
    optional bool primary = 3 [default = false];
  }
  repeated PostalAddress postal_addresses = 13;

  message InstantMessagingAddress {
    // Next ID to use: 5
    optional string address = 1;
    // Taken from https://developers.google.com/gdata/docs/2.0/elements#gdIm.
    enum Protocol {
      AIM = 0;
      MSN = 1;
      YAHOO = 2;
      SKYPE = 3;
      QQ = 4;
      GOOGLE_TALK = 5;
      ICQ = 6;
      JABBER = 7;
      OTHER = 8;
    }
    optional Protocol protocol = 2 [default = OTHER];
    optional AddressType type = 3;
    optional bool primary = 4 [default = false];
  }
  repeated InstantMessagingAddress instant_messaging_addresses = 14;
}

// Singleton message used by ContactDatabase to store update-related metadata.
message UpdateMetadata {
  // Next ID to use: 3

  // Time at which the last successful update was started, as given by
  // base::Time::ToInternalValue().
  optional int64 last_update_start_time = 1;

  // Latest time that we've seen in a contact's |update_time| field.  Note that
  // the time may have come from a deleted contact that has been discarded.
  optional int64 last_contact_update_time = 2;
}