package cz.moneta.test.dsl.wso2.objects.smallbusiness;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.ArrayList;
import java.util.List;

@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class CrtIbDispoAppRequest {

    @JsonProperty("CHANNEL_ID")
    private String channelId;

    @JsonProperty("POS_ID")
    private String posId;

    @JsonProperty("BANKER_SSO")
    private String bankerSso;

    @JsonProperty("APPLICANT_CIF")
    private String applicantCif;

    @JsonProperty("DISPO_CIF")
    private String dispoCif;

    @JsonProperty("DISPO_NAME")
    private String dispoName;

    @JsonProperty("DISPO_MIDDLENAME")
    private String dispoMiddlename;

    @JsonProperty("DISPO_SURNAME")
    private String dispoSurname;

    @JsonProperty("DISPO_RC_NUMBER")
    private String dispoRcNumber;

    @JsonProperty("DISPO_GENDER_ID")
    private String dispoGenderId;

    @JsonProperty("DISPO_CITIZENSHIP")
    private String dispoCitizenship;

    @JsonProperty("DISPO_BIRTH_COUNTRY_ID")
    private String dispoBirthCountryId;

    @JsonProperty("DISPO_BIRTH_DATE")
    private String dispoBirthDate; // format: date

    @JsonProperty("DISPO_BIRTH_PLACE")
    private String dispoBirthPlace;

    @JsonProperty("DISPO_RES_ADDR_COUNTRY")
    private String dispoResAddrCountry;

    @JsonProperty("DISPO_RES_ADDR_CITY")
    private String dispoResAddrCity;

    @JsonProperty("DISPO_RES_ADDR_ZIPCODE")
    private String dispoResAddrZipcode;

    @JsonProperty("DISPO_RES_ADDR_POST_OFFICE")
    private String dispoResAddrPostOffice;

    @JsonProperty("DISPO_RES_ADDR_STREET")
    private String dispoResAddrStreet;

    @JsonProperty("DISPO_RES_ADDR_STREET_DESC_NO")
    private String dispoResAddrStreetDescNo;

    @JsonProperty("DISPO_RES_ADDR_STREET_ORIENT_NO")
    private String dispoResAddrStreetOrientNo;

    @JsonProperty("DISPO_ID_CARD_TYPE")
    private String dispoIdCardType;

    @JsonProperty("DISPO_ID_CARD_NR")
    private String dispoIdCardNr;

    @JsonProperty("DISPO_ID_CARD_CNTRY_ID")
    private String dispoIdCardCntryId;

    @JsonProperty("DISPO_ID_CARD_EXP_DATE")
    private String dispoIdCardExpDate; // format: date

    @JsonProperty("DISPO_PHONE_PIN")
    private String dispoPhonePin;

    @JsonProperty("DISPO_EMAIL")
    private String dispoEmail;

    @JsonProperty("DISPO_IDENTITY_VERIFICATION_TYPE")
    private String dispoIdentityVerificationType;

    @JsonProperty("DISPO_BANKID_PEP_FLAG")
    private String dispoBankidPepFlag;

    @JsonProperty("DISPO_BANKID_SUBJ_ID")
    private String dispoBankidSubjId;

    @JsonProperty("DISPO_BANKID_TRN_ID")
    private String dispoBankidTrnId;

    @JsonProperty("DISPO_BANKID_TRUST_TP")
    private String dispoBankidTrustTp;

    @JsonProperty("DISPO_BANKID_UPD_DT")
    private String dispoBankidUpdDt; // format: date-time

    @JsonProperty("DISPO_BANKID_UPD_TS")
    private Long dispoBankidUpdTs; // seconds since epoch

    @JsonProperty("DISPO_BANKID_VERIF_DT")
    private String dispoBankidVerifDt; // format: date-time

    @JsonProperty("DISPO_BANKID_VERIF_PROVIDER_ID")
    private String dispoBankidVerifProviderId;

    @JsonProperty("DIGI_ENABLE_ACTIVE_OPS")
    private String digiEnableActiveOps;

    @JsonProperty("DIGI_LOGIN")
    private String digiLogin;

    @JsonProperty("DIGI_ENTITY_ID")
    private Long digiEntityId;

    @JsonProperty("DIGI_CLIENT_ID")
    private Long digiClientId;

    @JsonProperty("DIGI_CONTEXT_ID")
    private Long digiContextId;

    @JsonProperty("DIGI_DAILY_OPS_LIMIT")
    private Long digiDailyOpsLimit;

    @JsonProperty("RS_1")
    @Builder.Default
    private List<Rs1> rs1 = new ArrayList<>();

    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class Rs1 {
        @JsonProperty("DISPO_ROLE")
        private String dispoRole;
    }
}
