syntax = "proto3";

package kyc;

service KycVerification {
  rpc StartVerification (StartVerificationRequest) returns (StartVerificationResponse);
  rpc RefreshAccessToken (RefreshAccessTokenRequest) returns (RefreshAccessTokenResponse);
  rpc GetVerificationStatus (GetVerificationStatusRequest) returns (GetVerificationStatusResponse);
  rpc GetVerificationStatusesBatch (GetVerificationStatusesBatchRequest) returns (GetVerificationStatusesBatchResponse);
  rpc ApplySumsubWebhook (ApplySumsubWebhookRequest) returns (ApplySumsubWebhookResponse);
  rpc GetApplicantFullData (GetApplicantFullDataRequest) returns (GetApplicantFullDataResponse);
}

enum KycStatus {
  KYC_STATUS_UNSPECIFIED = 0;
  KYC_STATUS_NOT_STARTED = 1;
  KYC_STATUS_IN_PROGRESS = 2;
  KYC_STATUS_PENDING_REVIEW = 3;
  KYC_STATUS_APPROVED = 4;
  KYC_STATUS_RETRY_REQUIRED = 5;
  KYC_STATUS_REJECTED = 6;
}

message StartVerificationRequest {
  string user_id = 1;
}

message StartVerificationResponse {
  string access_token = 1;
  int32 expires_in_sec = 2;
  string applicant_id = 3;
  KycStatus kyc_status = 4;
  string user_id = 5;
}

message RefreshAccessTokenRequest {
  string user_id = 1;
}

message RefreshAccessTokenResponse {
  string access_token = 1;
  int32 expires_in_sec = 2;
}

message GetVerificationStatusRequest {
  string user_id = 1;
}

message GetVerificationStatusResponse {
  string user_id = 1;
  reserved 2;
  reserved "external_user_id";
  string applicant_id = 3;
  KycStatus kyc_status = 4;
  string review_answer = 5;
  repeated string rejection_labels = 6;
  string moderation_comment = 7;
  int64 created_at_ms = 8;
  int64 updated_at_ms = 9;
}

message GetVerificationStatusesBatchRequest {
  repeated string user_ids = 1;
}

message GetVerificationStatusesBatchResponse {
  repeated GetVerificationStatusResponse users = 1;
}

message ApplySumsubWebhookRequest {
  string payloadDigest = 1;
  string payloadDigestAlg = 2;
  bytes rawBody = 3;
}

message ApplySumsubWebhookResponse {
  bool ok = 1;
}

message GetApplicantFullDataRequest {
  string user_id = 1;
}

message VerifiedApplicantResource {
  string image_id = 1;
  string id_doc_type = 2;
  string file_name = 3;
  string file_type = 4;
  string content_type = 5;
  int64 content_length = 6;
  bytes file_data = 7;
}

message GetApplicantFullDataResponse {
  string user_id = 1;
  string applicant_id = 2;
  string inspection_id = 3;
  string applicant_json = 4;
  string resources_json = 5;
  repeated VerifiedApplicantResource verified_resources = 6;
}
