syntax = "proto3";

package ua.gov.diia.types.token;

import "documents/authDocument.proto";
import "google/protobuf/struct.proto";
import "platformType.proto";
import "token/gender.proto";
import "token/user.proto";

option java_multiple_files = true;
option java_package = "ua.gov.diia.types.token";

message AuthEntryPoint {
  string target = 1;
  bool isBankId = 2;
  optional string bankName = 3;
  optional string document = 4;
}

message RefreshToken {
  string value = 1;
  int64 expirationTime = 2;
}

message UserTokenDataMsg {
  string fName = 1;
  string lName = 2;
  string mName = 3;
  string itn = 4;
  Gender gender = 5;
  string phoneNumber = 6;
  string email = 7;
  string passport = 8;
  ua.gov.diia.types.documents.AuthDocument document = 9;
  string birthDay = 10;
  string addressOfRegistration = 11;
  string addressOfBirth = 12;
  optional string bankUserId = 13;
  optional string edrpou = 14;
  optional string nationality = 15; // received from bankId auth
  optional string recordEDDR = 16; // received from bankId auth

  RefreshToken refreshToken = 17;
  string mobileUid = 18;
  string identifier = 19;
  AuthEntryPoint authEntryPoint = 20;
}

message VerifiedBaseTokenDataMsg {
  string fName = 1;
  string lName = 2;
  string mName = 3;
  string itn = 4;
  Gender gender = 5;
  string phoneNumber = 6;
  string email = 7;
  string passport = 8;
  ua.gov.diia.types.documents.AuthDocument document = 9;
  string birthDay = 10;
  string addressOfRegistration = 11;
  string addressOfBirth = 12;
  optional string bankUserId = 13;
  optional string edrpou = 14;
  optional string nationality = 15; // received from bankId auth
  optional string recordEDDR = 16; // received from bankId auth
  optional RefreshToken refreshToken = 17;
  string mobileUid = 18;
  string identifier = 19;
  AuthEntryPoint authEntryPoint = 20;

  optional int32 exp = 21;
  optional int32 iat = 22;
}

message EResidentTokenDataMsg {
  string fName = 1;
  string lName = 2;
  string mName = 3;
  string itn = 4;
  Gender gender = 5;
  string phoneNumber = 6;
  string email = 7;
  string passport = 8;
  ua.gov.diia.types.documents.AuthDocument document = 9;
  string birthDay = 10;
  string addressOfRegistration = 11;
  string addressOfBirth = 12;
  optional string bankUserId = 13;
  optional string edrpou = 14;
  optional string nationality = 15; // received from bankId auth
  optional string recordEDDR = 16; // received from bankId auth

  RefreshToken refreshToken = 17;
  string mobileUid = 18;
  string identifier = 19;
  AuthEntryPoint authEntryPoint = 20;
}

message EResidentApplicantTokenDataMsg {
  string email = 1;
  optional ua.gov.diia.types.documents.AuthDocument document = 2;
  RefreshToken refreshToken = 3;
  string mobileUid = 4;
  string identifier = 5;
  AuthEntryPoint authEntryPoint = 6;
}

message AcquirerTokenDataMsg {
  RefreshToken refreshToken = 1;
  string _id = 2; // <T extends ObjectId | string = ObjectId>
  optional string partnerId = 3;
}

message PartnerTokenDataMsg {
  RefreshToken refreshToken = 1;
  string _id = 2; // <T extends ObjectId | string = ObjectId>
  google.protobuf.Struct scopes = 3;
}

message TemporaryTokenDataMsg {
  RefreshToken refreshToken = 1;
  string mobileUid = 2;
  optional ua.gov.diia.types.PlatformType platformType = 3;
  string jti = 4;
  repeated string scope = 5;
  optional UserIdentificationData userIdentificationData = 6;
}

message ServiceEntranceTokenDataMsg {
  RefreshToken refreshToken = 1;
  string acquirerId = 2; // <T extends ObjectId | string = ObjectId>
  string branchHashId = 3;
  string offerHashId = 4;
  string offerRequestHashId = 5;
  string mobileUid = 6;
}

message ServiceUserTokenDataMsg {
  string login = 1;
}

message UserIdentificationData {
  optional string itn = 1;
  optional string identifier = 2;
}
