package go.kr.project.api.model.response;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;

import java.util.List;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@Schema(description = "자동차등록원부(갑) 응답 모델 (신버전)")
@Getter
@Setter
public class NewLedgerResponse { // 총 64개 필드 (외부 클래스 66개, 중첩 Record 클래스 16개)

    /** LOG 생성 키 (내부 처리용) */
    private String generatedId;
        
    /** 트랜잭션 ID (내부 처리용) */
    private String txId;

    @JsonProperty("LINK_RSLT_CD")
    private String linkRsltCd;

    @JsonProperty("LINK_RSLT_DTL")
    private String linkRsltDtl;

    /** 원부그룹번호 */
    @JsonProperty("LEDGER_GROUP_NO")
    private String ledgerGroupNo;

    /** 원부개별번호 */
    @JsonProperty("LEDGER_INDIV_NO")
    private String ledgerIndivNo;

    /** 차량관리번호 */
    @JsonProperty("VHMNO")
    private String vhmno;

    /** 차량등록번호 */
    @JsonProperty("VHRNO")
    private String vhrno;

    /** 차대번호 */
    @JsonProperty("VIN")
    private String vin;

    /** 차종종별코드 */
    @JsonProperty("CARMDL_ASORT_CD")
    private String carmdlAsortCd;

    /** 차종종별명 */
    @JsonProperty("CARMDL_ASORT_NM")
    private String carmdlAsortNm;

    /** 차명 */
    @JsonProperty("ATMB_NM")
    private String atmbNm;

    /** 색상코드 */
    @JsonProperty("COLOR_CD")
    private String colorCd;

    /** 색상명 */
    @JsonProperty("COLOR_NM")
    private String colorNm;

    /** 번호판규격코드 */
    @JsonProperty("NOPLT_SPCFCT_CD")
    private String nopltSpcfctCd;

    /** 번호판규격명 */
    @JsonProperty("NOPLT_SPCFCT_NM")
    private String nopltSpcfctNm;

    /** 용도구분코드 */
    @JsonProperty("USG_SE_CD")
    private String usgSeCd;

    /** 용도구분명 */
    @JsonProperty("USG_SE_NM")
    private String usgSeNm;

    /** 원동기형식명 */
    @JsonProperty("MTRS_FOM_NM")
    private String mtrsFomNm;

    /** 형식명 */
    @JsonProperty("FOM_NM")
    private String fomNm;

    /** 취득금액 */
    @JsonProperty("ACQS_AMT")
    private String acqsAmt;

    /** 등록상세코드 */
    @JsonProperty("REG_DTL_CD")
    private String regDtlCd;

    /** 등록상세명 */
    @JsonProperty("REG_DTL_NM")
    private String regDtlNm;

    /** 최초등록일 */
    @JsonProperty("FRST_REG_YMD")
    private String frstRegYmd;

    /** 차령종료일 */
    @JsonProperty("VEAG_END_YMD")
    private String veagEndYmd;

    /** 연식 */
    @JsonProperty("YRIDNW")
    private String yridnw;

    /** 제원관리번호1 */
    @JsonProperty("SPMNNO_1")
    private String spmnno1;

    /** 제원관리번호2 */
    @JsonProperty("SPMNNO_2")
    private String spmnno2;

    /** 제작년월일 */
    @JsonProperty("FBCTN_YMD")
    private String fbctnYmd;

    /** 주행거리 */
    @JsonProperty("DRVNG_DSTNC")
    private String drvngDstnc;

    /** 검사유효기간시작일 */
    @JsonProperty("INSP_VLD_PD_BGNG_YMD")
    private String inspVldPdBgngYmd;

    /** 검사유효기간종료일 */
    @JsonProperty("INSP_VLD_PD_END_YMD")
    private String inspVldPdEndYmd;

    /** 점검유효기간시작일 */
    @JsonProperty("CHCK_VLD_PD_BGNG_YMD")
    private String chckVldPdBgngYmd;

    /** 점검유효기간종료일 */
    @JsonProperty("CHCK_VLD_PD_END_YMD")
    private String chckVldPdEndYmd;

    /** 등록신청구분명 */
    @JsonProperty("REG_APLY_SE_NM")
    private String regAplySeNm;

    /** 최초등록접수번호 */
    @JsonProperty("FRST_REG_APLY_RCPT_NO")
    private String frstRegAplyRcptNo;

    /** 번호판영치최고일 */
    @JsonProperty("NOPLT_CSDY_AVTSMT_YMD")
    private String nopltCsdyAvtsmtYmd;

    /** 번호판영치여부 */
    @JsonProperty("NOPLT_CSDY_YN")
    private String nopltCsdyYn;

    /** 사업용사용기간 */
    @JsonProperty("BSS_USE_PD_YMD")
    private String bssUsePdYmd;

    /** 직권말소예고통지일 */
    @JsonProperty("OCTHT_ERSR_PRVNTC_AVTSMT_YMD")
    private String octhtErsrPrvntcAvtsmtYmd;

    /** 말소등록일 */
    @JsonProperty("ERSR_REG_YMD")
    private String ersrRegYmd;

    /** 말소등록구분코드 */
    @JsonProperty("ERSR_REG_SE_CD")
    private String ersrRegSeCd;

    /** 말소등록구분명 */
    @JsonProperty("ERSR_REG_SE_NM")
    private String ersrRegSeNm;

    /** 저당수 */
    @JsonProperty("MRTG_CNT")
    private String mrtgCnt;

    /** 압류건수 */
    @JsonProperty("SZR_CNT")
    private String szrCnt;

    /** 구조변경수 */
    @JsonProperty("STRCT_CHG_CNT")
    private String strctChgCnt;

    /** 사용본거지주소 */
    @JsonProperty("USGSRHLD_ADDR_1")
    private String usgsrhldAddr1;

    /** 사용본거지주소상세 */
    @JsonProperty("USGSRHLD_ADDR_DTL_1")
    private String usgsrhldAddrDtl1;

    /** 소유자주소 */
    @JsonProperty("OWNR_ADDR")
    private String ownrAddr;

    /** 소유자주소상세 */
    @JsonProperty("OWNR_ADDR_DTL")
    private String ownrAddrDtl;

    /** 개인사업자여부 */
    @JsonProperty("INDVDL_BZMN_YN")
    private String indvdlBzmnYn;

    /** 대표소유자전화번호 */
    @JsonProperty("RPRS_OWNR_TELNO")
    private String rprsOwnrTelno;

    /** 대표소유자성명 */
    @JsonProperty("RPRS_OWNR_NM")
    private String rprsOwnrNm;

    /** 대표소유자회원구분코드 */
    @JsonProperty("RPRS_OWNR_MBR_SE_CD")
    private String rprsOwnrMbrSeCd;

    /** 대표소유자회원번호 */
    @JsonProperty("RPRSV_OWNR_IDECNO")
    private String rprsvOwnrIdecno;

    /** 비과세대상구분코드명 */
    @JsonProperty("TAXXMPT_APLCN_SE_CD")
    private String taxxmptAplcnSeCd;

    /** 비과세대상구분코드 */
    @JsonProperty("TAXXMPT_TRPR_SE_CD")
    private String taxxmptTrprSeCd;

    /** 특기사항건수 */
    @JsonProperty("SPCABL_MTTR_CNT")
    private String spcablMttrCnt;

    /** 사용본거지행정동명 */
    @JsonProperty("USGSRHLD_DONG_NM")
    private String usgsrhldDongNm;

    /** 예고수 */
    @JsonProperty("PRVNTC_CNT")
    private String prvntcCnt;

    /** 수출이행여부신고일 */
    @JsonProperty("XPORT_FLFL_YN_DCLR_YMD")
    private String xportFlflYnDclrYmd;

    /** 발급번호 */
    @JsonProperty("ISSU_NO")
    private String issuNo;

    /** 최초양도일 */
    @JsonProperty("FRST_TRNSFR_YMD")
    private String frstTrnsfrYmd;

    /** 구동축전지식별번호 */
    @JsonProperty("DRIV_SRGBTRY_IDNTF_NO")
    private String drivSrgbtryIdntfNo;

    /** 처리불가사유코드 */
    @JsonProperty("PROCESS_IMPRTY_RESN_CODE")
    private String processImprtyResnCode;

    /** 처리불가사유상세 */
    @JsonProperty("PROCESS_IMPRTY_RESN_DTLS")
    private String processImprtyResnDtls;

    @JsonProperty("record")
    private List<Record> record;


    @JsonInclude(JsonInclude.Include.NON_NULL)
    @JsonIgnoreProperties(ignoreUnknown = true)
    @Schema(name = "NewLedgerRecord", description = "원부 변경내역 record (신버전)")
    @Getter
    @Setter
    public static class Record {
        /** 해제여부 */
        @JsonProperty("SZR_RMV_DTL_SN")
        private String szrRmvDtlSn;

        /** 변경업무구분코드 */
        @JsonProperty("CHG_TASK_SE_CD")
        private String chgTaskSeCd;

        /** 주번호 */
        @JsonProperty("MAIN_NO")
        private String mainNo;

        /** 부번호 */
        @JsonProperty("SNO")
        private String sno;

        /** 사항란 */
        @JsonProperty("SPCABL_MTTR")
        private String spcablMttr;

        /** 세대주명 */
        @JsonProperty("HSHLDR_NM")
        private String hshldrNm;

        /** 세대주개인암호화번호 */
        @JsonProperty("HSHLDR_IDECNO")
        private String hshldrIdecno;

        /** 접수번호 */
        @JsonProperty("APLY_RCPT_NO")
        private String aplyRcptNo;

        /** 차량관리번호 */
        @JsonProperty("VHMNO")
        private String vhmno;

        /** 원부그룹번호 */
        @JsonProperty("LEDGER_GROUP_NO")
        private String ledgerGroupNo;

        /** 원부개별번호 */
        @JsonProperty("LEDGER_INDIV_NO")
        private String ledgerIndivNo;

        /** 변경업무구분명 */
        @JsonProperty("CHG_TASK_SE_NM")
        private String chgTaskSeNm;

        /** 변경일자 */
        @JsonProperty("CHG_YMD")
        private String chgYmd;

        /** 상세순번 */
        @JsonProperty("DTL_SN")
        private String dtlSn;

        /** 표기여부 */
        @JsonProperty("FLAG")
        private String flag;
    }
}
