use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use validator::Validate;
use crate::v2_1::datatypes::{AddressType, CustomDataType};
use crate::v2_1::enumerations::PaymentStatusEnumType;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Validate)]
#[serde(rename_all = "camelCase")]
pub struct NotifySettlementRequest {
#[serde(skip_serializing_if = "Option::is_none")]
#[validate(length(max = 36))]
pub transaction_id: Option<String>,
#[validate(length(max = 255))]
pub psp_ref: String,
pub status: PaymentStatusEnumType,
#[serde(skip_serializing_if = "Option::is_none")]
#[validate(length(max = 500))]
pub status_info: Option<String>,
pub settlement_amount: f64,
pub settlement_time: DateTime<Utc>,
#[serde(skip_serializing_if = "Option::is_none")]
#[validate(length(max = 50))]
pub receipt_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[validate(length(max = 2000))]
pub receipt_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub vat_company: Option<AddressType>,
#[serde(skip_serializing_if = "Option::is_none")]
#[validate(length(max = 20))]
pub vat_number: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub custom_data: Option<CustomDataType>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Validate)]
#[serde(rename_all = "camelCase")]
pub struct NotifySettlementResponse {
#[serde(skip_serializing_if = "Option::is_none")]
#[validate(length(max = 2000))]
pub receipt_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[validate(length(max = 50))]
pub receipt_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub custom_data: Option<CustomDataType>,
}