syntax = "proto3";

package photon.imessage.v1;

import "photon/imessage/v1/address_types.proto";

option swift_prefix = "PIMsg_";


// ---------------------------------------------------------------------------
// Service
// ---------------------------------------------------------------------------

// All RPCs share the same `address` query rules:
//
//   - accept an E.164 phone number such as `+14155550123`
//   - accept a full email such as `alice@example.com`
//   - the server trims whitespace and lowercases email queries before lookup
//     or external availability checks
//   - empty or malformed inputs are rejected with `INVALID_ARGUMENT`
service AddressService {

  // Returns services seen and country for the address.
  //
  // Errors: NOT_FOUND when the address has never been seen in this device's
  // iMessage history.
  rpc GetAddressInfo(GetAddressInfoRequest) returns (GetAddressInfoResponse);

  // Returns whether Messages currently reports this address as Focus-silenced.
  rpc GetFocusStatus(GetFocusStatusRequest) returns (GetFocusStatusResponse);

  // Returns whether the address is reachable via iMessage at query time.
  rpc GetIMessageAvailability(GetIMessageAvailabilityRequest) returns (GetIMessageAvailabilityResponse);

}


// ---------------------------------------------------------------------------
// Requests / Responses
// ---------------------------------------------------------------------------

message GetAddressInfoRequest {

  string address = 1;

}


message GetAddressInfoResponse {

  MultiServiceAddressInfo info = 1;

}


message GetFocusStatusRequest {

  string address = 1;

}


message GetFocusStatusResponse {

  // True when Messages currently shows this address as silenced by Focus.
  // False also covers unknown, not shared, and not silenced.
  bool is_silenced_by_focus = 1;

}


message GetIMessageAvailabilityRequest {

  string address = 1;

}


message GetIMessageAvailabilityResponse {

  bool is_available = 1;

}
