syntax = "proto3";
package crm_auth;

service CrmAuthService {
  rpc Login (CrmLoginRequest) returns (CrmAuthSessionResponse);
  rpc RefreshSession (CrmRefreshSessionRequest) returns (CrmAuthSessionResponse);
  rpc RevokeSession (CrmRevokeSessionRequest) returns (CrmRevokeSessionResponse);
  rpc ValidateAccess (CrmValidateAccessRequest) returns (CrmValidateAccessResponse);
  rpc GetMe (CrmGetMeRequest) returns (CrmManagerResponse);
}

enum CrmManagerStatus {
  CRM_MANAGER_STATUS_UNSPECIFIED = 0;
  CRM_MANAGER_STATUS_ACTIVE = 1;
  CRM_MANAGER_STATUS_DISABLED = 2;
}

message CrmLoginRequest {
  string email = 1;
  string otp = 2;
  string user_agent = 3;
  string ip_address = 4;
  string password = 5;
}

message CrmRefreshSessionRequest {
  string refresh_token = 1;
  string user_agent = 2;
  string ip_address = 3;
}

message CrmRevokeSessionRequest {
  string refresh_token = 1;
}

message CrmRevokeSessionResponse {
  bool success = 1;
  string session_id = 2;
  string manager_id = 3;
  string reason = 4;
}

message CrmValidateAccessRequest {
  string authorization = 1;
}

message CrmValidateAccessResponse {
  bool allowed = 1;
  string manager_id = 2;
  string reason = 3;
}

message CrmGetMeRequest {
  string access_token = 1;
}

message SectionPermission {
  string section = 1;
  bool view = 2;
  bool edit = 3;
}

message CrmManagerResponse {
  string id = 1;
  string email = 2;
  string username = 3;
  string first_name = 4;
  string last_name = 5;
  string display_name = 6;
  string avatar_url = 7;
  CrmManagerStatus status = 8;
  int64 created_at_unix_ms = 9;
  repeated string roles = 10;
  repeated string permissions = 11;
  bool is_super_admin = 12;
  repeated SectionPermission section_permissions = 13;
  string full_name = 14;
  string role = 15;
  int32 permissions_version = 16;
  bool can_cross_office = 17;
  repeated string office_ids = 18;
}

message CrmAuthSessionResponse {
  bool success = 1;
  string access_token = 2;
  int64 access_expires_at_unix_ms = 3;
  string refresh_token = 4;
  int64 refresh_expires_at_unix_ms = 5;
  string session_id = 6;
  string manager_id = 7;
  string reason = 8;
  CrmManagerResponse manager = 9;
}
