syntax = "proto3";

package payout.v1;

option csharp_namespace = "Payout.V1";
option java_multiple_files = true;
option java_package = "com.arbiwallet.payout.v1";

service PayoutService {
  rpc ParsePromptPayQr(ParsePromptPayQrRequest) returns (ParsePromptPayQrResponse);
  rpc ConfirmPayoutPayment(ConfirmPayoutPaymentRequest) returns (ConfirmPayoutPaymentResponse);
  rpc HandlePayoutWebhook(HandlePayoutWebhookRequest) returns (HandlePayoutWebhookResponse);
  rpc GetPayout(GetPayoutRequest) returns (GetPayoutResponse);
}

message ParsePromptPayQrRequest {
  string qr_string = 1;
  string user_id = 2;
  double amount = 3;
}

message ParsePromptPayQrResponse {
  int64 scan_id = 1;
  string input_amount_to_pay = 2;
  string input_currency_to_pay = 3;
  string converted_amount_to_pay = 4;
  string converted_currency_to_pay = 5;
  double fee_percent = 6;
  string fee_on_converted = 7;
  string converted_amount_with_fee = 8;
}

message ConfirmPayoutPaymentRequest {
  int64 scan_id = 1;
  string user_id = 3;
}

message ConfirmPayoutPaymentResponse {
  int64 payout_id = 1;
  string status = 2;
}

message HandlePayoutWebhookRequest {
  bytes rawBody = 1;
  string x_signature = 2;
}

message HandlePayoutWebhookResponse {
  bool ok = 1;
}

message GetPayoutRequest {
  int64 payout_id = 1;
}

message GetPayoutResponse {
  int64 payout_id = 1;
  int64 scan_id = 2;
  string status = 3;
  optional string final_converted_amount = 4;
  optional string final_converted_currency = 5;
  string created_at = 6;
  optional string completed_at = 7;
}
