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;

/**
 * 자동차기본사항조회 응답 모델 (신버전)
 *
 * <p>
 * 국토교통부 → 지자체 응답 규격을 매핑한 모델입니다. 상위에 연계결과 정보가 오고,
 * 상세 데이터는 record 배열로 전달됩니다.
 * </p>
 */
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@Schema(description = "자동차기본사항조회 응답 모델 (신버전)")
@Getter
@Setter
public class NewBasicResponse { // 총 3개 필드 (외부 클래스 3개, 중첩 Record 클래스 84개)

    /** LOG 생성 키 (내부 처리용) */
    private String generatedId;

    /** 트랜잭션 ID (내부 처리용) */
    private String txId;

    /** 연계결과코드 (성공/실패 코드) */
    @JsonProperty("LINK_RSLT_CD")
    private String linkRsltCd;

    /** 연계결과상세 (에러 메시지 등 상세 사유) */
    @JsonProperty("LINK_RSLT_DTL")
    private String linkRsltDtl;

    /** 응답 레코드 목록 */
    @JsonProperty("record")
    private List<Record> record;

    @JsonInclude(JsonInclude.Include.NON_NULL)
    @JsonIgnoreProperties(ignoreUnknown = true)
    @Schema(name = "NewBasicRecord", description = "기본사항 record 항목 (신버전)")
    @Getter
    @Setter
    public static class Record {
        @JsonProperty("VHRNO") private String vhrno; // 차량번호
        @JsonProperty("ATMB_NM") private String atmbNm; // 차명
        @JsonProperty("RPRS_OWNR_NM") private String rprsOwnrNm; // 대표소유자성명
        @JsonProperty("RPRSV_OWNR_IDECNO") private String rprsvOwnrIdecno; // 대표소유자회원번호
        @JsonProperty("ERSR_REG_YMD") private String ersrRegYmd; // 말소등록일
        @JsonProperty("PRCS_IMPRTY_RSN_CD") private String prcsImprtyRsnCd; // 처리불가사유코드
        @JsonProperty("PRCS_IMPRTY_RSN_DTLS") private String prcsImprtyRsnDtls; // 처리불가사유명세
        @JsonProperty("YRIDNW") private String yridnw; // 연식
        @JsonProperty("VIN") private String vin; // 차대번호
        @JsonProperty("CARMDL_ASORT_NM") private String carmdlAsortNm; // 차종종별명
        @JsonProperty("FRST_REG_YMD") private String frstRegYmd; // 최초등록일
        @JsonProperty("COLOR_NM") private String colorNm; // 색상명
        @JsonProperty("STRCT_CHG_CNT") private String strctChgCnt; // 구조변경수
        @JsonProperty("NOPLT_CSDY_YN") private String noplTcsdyYn; // 번호판영치여부
        @JsonProperty("NOPLT_CSDY_AVTSMT_YMD") private String noplTcsdyAvtsmtYmd; // 번호판영치최고일
        @JsonProperty("INSP_VLD_PD_BGNG_YMD") private String inspVldPdBgngYmd; // 검사유효기간시작일
        @JsonProperty("INSP_VLD_PD_END_YMD") private String inspVldPdEndYmd; // 검사유효기간종료일
        @JsonProperty("SPMNNO") private String spmnno; // 제원관리번호
        @JsonProperty("DRVNG_DSTNC") private String drvngDstnc; // 주행거리
        @JsonProperty("FOM_NM") private String fomNm; // 형식
        @JsonProperty("DSPLVL") private String dsplvl; // 배기량
        @JsonProperty("CARMDL_CLSF_NM") private String carmdlClsfNm; // 차종분류명
        @JsonProperty("FBCTN_YMD") private String fbctnYmd; // 제작년월일
        @JsonProperty("USGSRHLD_ADDR_NM") private String usgsrhldAddrNm; // 사용본거지상세주소
        @JsonProperty("MTRS_FOM_NM") private String mtrsFomNm; // 원동기형식명
        @JsonProperty("RDCPCT_CNT") private String rdcpctCnt; // 승차정원수
        @JsonProperty("FRST_REG_APLY_RCPT_NO") private String frstRegAplyRcptNo; // 최초등록접수번호
        @JsonProperty("OGNZ_NM") private String ognzNm; // 등록기관명
        @JsonProperty("ERSR_REG_SE_NM") private String ersrRegSeNm; // 말소등록구분명
        @JsonProperty("BFR_VHRNO") private String bfrVhrno; // 이전차량번호
        @JsonProperty("USE_FUEL_CD") private String useFuelCd; // 사용연료코드
        @JsonProperty("RPRS_OWNR_MBR_SE_CD") private String rprsOwnrMbrSeCd; // 대표소유자회원구분코드
        @JsonProperty("RPRS_OWNR_TELNO") private String rprsOwnrTelno; // 대표소유자전화번호
        @JsonProperty("OWNR_STDG_CD") private String ownrStdgCd; // 소유자법정동코드
        @JsonProperty("OWNR_WHOL_ADDR") private String ownrWholAddr; // 소유자전체주소
        @JsonProperty("VHCL_TOTL_WT") private String vhclTotlWt; // 차량총중량
        @JsonProperty("MXMM_LDG") private String mxmmLdg; // 최대적재량
        @JsonProperty("CBD_LT") private String cbdLt; // 차체길이
        @JsonProperty("CBD_BT") private String cbdBt; // 차체너비
        @JsonProperty("CBD_HG") private String cbdHg; // 차체높이
        @JsonProperty("CARMDL_ASORT_CD") private String carmdlAsortCd; // 차종종별코드
        @JsonProperty("CARMDL_TYPE_CD") private String carmdlTypeCd; // 차종유형코드
        @JsonProperty("FUEL_CNSMPRT") private String fuelCnsmprt; // 연료소비율
        @JsonProperty("ERSR_REG_SE_CD") private String ersrRegSeCd; // 말소등록구분코드
        @JsonProperty("REG_DTL_CD") private String regDtlCd; // 등록상세코드
        @JsonProperty("USGSRHLD_STDG_CD") private String usgsrhldStdgCd; // 사용본거지법정동코드
        @JsonProperty("USGSRHLD_DONG_CD") private String usgsrhldDongCd; // 사용본거지행정동코드
        @JsonProperty("USGSRHLD_MTN_YN") private String usgsrhldMtnYn; // 사용본거지산 여부
        @JsonProperty("USGSRHLD_LNBR") private String usgsrhldLnbr; // 사용본거지번지
        @JsonProperty("USGSRHLD_HO") private String usgsrhldHo; // 사용본거지호
        @JsonProperty("USGSRHLD_ROAD_NM_CD") private String usgsrhldRoadNmCd; // 사용본거지도로명코드
        @JsonProperty("USGSRHLD_UDGD_BLDG_SE_CD") private String usgsrhldUdgdBldgSeCd; // 사용본거지지하건물구분코드
        @JsonProperty("USGSRHLD_BMNO") private String usgsrhldBmno; // 사용본거지건물주요번호
        @JsonProperty("USGSRHLD_BSNO") private String usgsrhldBsno; // 사용본거지건물부번호
        @JsonProperty("OWNR_DONG_CD") private String ownrDongCd; // 소유자행정동코드
        @JsonProperty("OWNR_MTN_YN") private String ownrMtnYn; // 소유자산 여부
        @JsonProperty("OWNR_LNBR") private String ownrLnbr; // 소유자번지
        @JsonProperty("OWNR_HO") private String ownrHo; // 소유자호
        @JsonProperty("OWNR_ADDR_NM") private String ownrAddrNm; // 소유자상세주소
        @JsonProperty("OWNR_ROAD_NM_CD") private String ownrRoadNmCd; // 소유자도로명코드
        @JsonProperty("OWNR_UDGD_BLDG_SE_CD") private String ownrUdgdBldgSeCd; // 소유자지하건물구분코드
        @JsonProperty("OWNR_BMNO") private String ownrBmno; // 소유자건물주요번호
        @JsonProperty("OWNR_BSNO") private String ownrBsno; // 소유자건물부번호
        @JsonProperty("REAR_VHRNO") private String rearVhrno; // 신차량번호
        @JsonProperty("USG_SE_CD") private String usgSeCd; // 용도구분코드
        @JsonProperty("VEAG_END_YMD") private String veagEndYmd; // 차령만료일자
        @JsonProperty("CHG_YMD") private String chgYmd; // 차번호변경시기
        @JsonProperty("CARMDL_SE_CD") private String carmdlSeCd; // 차종분류코드
        @JsonProperty("CARMDL_TYPE_NM") private String carmdlTypeNm; // 차종유형명
        @JsonProperty("ACQS_YMD") private String acqsYmd; // 취득일자
        @JsonProperty("ACQS_END_YMD") private String acqsEndYmd; // 취득종료일자
        @JsonProperty("TRANSR_REG_YMD") private String transrRegYmd; // 이전등록일(양수일)
        @JsonProperty("SPCF_REG_STTS_CD") private String spcfRegSttsCd; // 제원등록상태코드
        @JsonProperty("SRC_SE_CD") private String srcSeCd; // 출처구분코드
        @JsonProperty("NOPLT_SPCFCT_CD") private String noplTSpcfctCd; // 번호판규격코드
        @JsonProperty("ACQS_AMT") private String acqsAmt; // 취득금액
        @JsonProperty("USGSRHLD_GRC_CD") private String usgsrhldGrcCd; // 사용본거지관청코드
        @JsonProperty("VLNT_ERSR_PRVNTC_AVTSMT_YMD") private String vlntErsrPrvntcAvtsmtYmd; // 예고통지일
        @JsonProperty("FRST_MXMM_LDG") private String frstMxmmLdg; // 최초최대적재량
        @JsonProperty("REG_YMD") private String regYmd; // 등록일(변경일)
        @JsonProperty("ELCTY_CMPND_FUEL_CNSMPRT") private String elctyCmpndFuelCnsmprt; // 전기복합연료소비율
        @JsonProperty("USGSRHLD_WHOL_ADDR") private String usgsrhldWholAddr; // 사용본거지전체주소
        @JsonProperty("MRTG_CNT") private String mrtgCnt; // 저당수
        @JsonProperty("SZR_CNT") private String szrCnt; // 압류건수
    }
}
