package cz.moneta.test.dsl.cagw.api.cbl.psd.pisp.my.payments;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@NoArgsConstructor
@AllArgsConstructor
@Data
public class PaymentResponse {
    private Amount amount;
    private Object creditor;
    private CreditorAccountResponse creditorAccount;
    private CreditorAgent creditorAgent;
    private DebtorAccount debtorAccount;
    private PaymentIdentification paymentIdentification;
    private Object paymentTypeInformation;
    private RemittanceInformation remittanceInformation;
    private String requestedExecutionDate;
    private String chargeBearer;
    private String transactionConfirmation;

    @NoArgsConstructor
    @AllArgsConstructor
    @Data
    public static class CreditorAccountResponse {
        private Identification identification;
    }

    @NoArgsConstructor
    @AllArgsConstructor
    @Data
    public static class Identification {
        private String iban;
        private Object other;
    }

    @NoArgsConstructor
    @AllArgsConstructor
    @Data
    public static class CreditorAgent {
        private FinancialInstitutionIdentification financialInstitutionIdentification;
    }

    @NoArgsConstructor
    @AllArgsConstructor
    @Data
    public static class FinancialInstitutionIdentification {
        private String bic;
        private String name;
        private PostalAddress postalAddress;
    }

    @NoArgsConstructor
    @AllArgsConstructor
    @Data
    public static class PostalAddress {
        private String addressLine;
        private String country;
        private String townName;
    }

    @NoArgsConstructor
    @AllArgsConstructor
    @Data
    public static class PaymentIdentification {
        private String endToEndIdentification;
        private String transactionIdentification;
    }

    @NoArgsConstructor
    @AllArgsConstructor
    @Data
    public static class RemittanceInformation {
        private Structured structured;
        private String unstructured;
    }

    @NoArgsConstructor
    @AllArgsConstructor
    @Data
    public static class Structured {
        private CreditorReferenceInformation creditorReferenceInformation;
    }

    @NoArgsConstructor
    @AllArgsConstructor
    @Data
    public static class CreditorReferenceInformation {
        private String reference;
    }

}
