<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="dateUtil" uri="http://egovframework.go.kr/functions/date-util" %>

<!-- Main body -->
<div class="main_body">
    <section id="section8" class="main_bars">
        <div class="bgs-main">
            <section id="section5">
                <div class="sub_title"></div>
            </section>
        </div>
    </section>
    <div class="contants_body">
        <div class="gs_b_top">
            <ul class="lef">
                <li class="th">조회 구분</li>
                <li>
                    <select id="inqryType" name="inqryType" class="input" style="width: 250px;">
                        <option value="basic">자동차 기본사항 조회</option>
                        <option value="ledger">자동차 등록원부(갑) 조회</option>
                    </select>
                </li>
            </ul>
            <ul class="rig2">
                <li><button type="button" id="search_btn" class="newbtnss bg1">조회</button></li>
                <li><button type="button" id="reset_btn" class="newbtnss bg5" style="margin-left: 5px;">초기화</button></li>
            </ul>
            <!-- 기본정보 조회 조건 -->
            <ul id="basicSearchArea" class="lef2">
                <li class="th"><span class="essential">*</span> 부과기준일</li>
                <li>
                    <input type="text" id="levyStdde" name="levyStdde" class="input datepicker calender" style="width: 150px;" autocomplete="off" value="${dateUtil:getCurrentDateTime('yyyy-MM-dd')}"/>
                </li>
                <li class="th">차량번호</li>
                <li>
                    <input type="text" id="vhrno" name="vhrno" class="input" style="width: 150px;" placeholder="예: 12가3456" maxlength="10" autocomplete="off"/>
                </li>
                <li class="th">차대번호</li>
                <li>
                    <input type="text" id="vin" name="vin" class="input" style="width: 200px;" placeholder="예: KMHAB812345678901" maxlength="17" autocomplete="off"/>
                </li>
            </ul>
            <!-- 등록원부 조회 조건 -->
            <ul id="ledgerSearchArea" class="lef2" style="display: none;">
                <li class="th"><span class="essential">*</span> 차량번호</li>
                <li>
                    <input type="text" id="ledgerVhrno" name="ledgerVhrno" class="input" style="width: 150px;" placeholder="예: 12가3456" maxlength="10" autocomplete="off"/>
                </li>
                <li class="th"><span class="essential">*</span> 소유자명</li>
                <li>
                    <input type="text" id="cpttrNm" name="cpttrNm" class="input" style="width: 150px;" placeholder="소유자명" autocomplete="off"/>
                </li>
                <li class="th"><span class="essential">*</span> 주민번호(회원번호)</li>
                <li>
                    <input type="text" id="cpttrIhidnum" name="cpttrIhidnum" class="input" style="width: 150px;" placeholder="주민번호" maxlength="13" autocomplete="off"/>
                </li>
                <li class="th">법정동코드</li>
                <li>
                    <input type="text" id="cpttrLegaldongCode" name="cpttrLegaldongCode" class="input" style="width: 150px;" placeholder="법정동코드" maxlength="10" autocomplete="off"/>
                </li>
                <li class="th">내역표시</li>
                <li>
                    <select id="detailExpression" name="detailExpression" class="input" style="width: 100px;">
                        <option value="1">전체내역</option>
                        <option value="2">현재내역</option>
                    </select>
                </li>
            </ul>
        </div>
        <div class="gs_booking">
            <div class="row">
                <div class="col-sm-12">
                    <div class="box_column">
                        <ul class="box_title" style="display: flex; justify-content: space-between; align-items: center;">
                            <li class="tit">조회 결과</li>
                            <li class="rig">
                                <button type="button" id="btnResultClose" class="newbtn bg5" style="display: none;">닫기</button>
                            </li>
                        </ul>
                        <div class="containers" style="padding: 20px;">
                            <div id="resultContent" class="result-empty">
                                조회 버튼을 클릭하여 차량 정보를 조회하세요.
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<!-- /Main body -->

<style>
.essential {
    color: red;
    font-weight: bold;
    margin-right: 3px;
}

.result-empty {
    text-align: center;
    padding: 0px;
    color: #999;
    font-size: 14px;
}

.result-detail-table {
    width: 100%;
    border-collapse: collapse;
    margin-top: 10px;
}

.result-detail-table th {
    background-color: #f5f5f5;
    padding: 12px;
    border: 1px solid #ddd;
    text-align: left;
    font-weight: bold;
    width: 20%;
    color: #333;
}

.result-detail-table td {
    padding: 12px;
    border: 1px solid #ddd;
    width: 30%;
    color: #555;
}

.result-section-title {
    background-color: #2c5aa0;
    color: white;
    padding: 10px 15px;
    margin-top: 20px;
    margin-bottom: 10px;
    font-weight: bold;
    border-radius: 4px;
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.collapse-btn {
    cursor: pointer;
    font-size: 12px;
    font-weight: normal;
    padding: 2px 8px;
    background-color: rgba(255,255,255,0.2);
    border-radius: 3px;
}

.collapse-btn:hover {
    background-color: rgba(255,255,255,0.4);
}

.result-section-title:first-child {
    margin-top: 0;
}

/* 변경 이력 테이블 전용 스타일 */
.result-history-table {
    width: 100%;
    border-collapse: collapse;
    margin-top: 10px;
}

.result-history-table thead th {
    background-color: #e8e8e8;
    padding: 12px 8px;
    border: 1px solid #ddd;
    text-align: center;
    font-weight: bold;
    color: #333;
    font-size: 13px;
}

.result-history-table tbody td {
    padding: 10px 8px;
    border: 1px solid #ddd;
    color: #555;
    font-size: 13px;
}

.result-history-table tbody td.text-center {
    text-align: center;
}

.result-history-table tbody td.text-left {
    text-align: left;
}

.result-history-table tbody tr:hover {
    background-color: #f9f9f9;
}
</style>

<script type="text/javascript">
    /**
     * 차량 정보 조회 모듈
     */
    (function(window, $) {
        'use strict';

        var VehicleInquiry = {

            /**
             * 조회 구분 변경 시 검색 영역 표시/숨김
             */
            onInqryTypeChange: function() {
                var inqryType = $("#inqryType").val();

                // 조회 구분에 따른 검색 영역 표시
                if (inqryType === "basic") {
                    $("#basicSearchArea").show();
                    $("#ledgerSearchArea").hide();
                } else if (inqryType === "ledger") {
                    $("#basicSearchArea").hide();
                    $("#ledgerSearchArea").show();
                }
            },

            /**
             * 조회 실행
             */
            executeSearch: function() {
                var self = this;
                var inqryType = $("#inqryType").val();

                // 조회 타입에 따라 유효성 검사 및 처리
                if (inqryType === "basic") {
                    // 기본정보: 부과기준일 필수, 차량번호 or 차대번호 중 하나 필수
                    var levyStdde = $.trim($("#levyStdde").val());
                    var vhrno = $.trim($("#vhrno").val());
                    var vin = $.trim($("#vin").val());

                    if (!levyStdde) {
                        alert("부과기준일을 입력해주세요.");
                        $("#levyStdde").focus();
                        return;
                    }

                    if (!vhrno && !vin) {
                        alert("차량번호 또는 차대번호 중 하나를 입력해주세요.");
                        $("#vhrno").focus();
                        return;
                    }

                    self.callBasicApi();
                } else if (inqryType === "ledger") {
                    // 등록원부: 차량번호, 소유자명, 주민번호 필수
                    var ledgerVhrno = $.trim($("#ledgerVhrno").val());
                    var cpttrNm = $.trim($("#cpttrNm").val());
                    var cpttrIhidnum = $.trim($("#cpttrIhidnum").val());

                    if (!ledgerVhrno) {
                        alert("차량번호를 입력해주세요.");
                        $("#ledgerVhrno").focus();
                        return;
                    }

                    if (!cpttrNm) {
                        alert("소유자명을 입력해주세요.");
                        $("#cpttrNm").focus();
                        return;
                    }

                    if (!cpttrIhidnum) {
                        alert("주민번호를 입력해주세요.");
                        $("#cpttrIhidnum").focus();
                        return;
                    }

                    self.callLedgerApi();
                }
            },

            /**
             * 기본사항 조회 API 호출
             */
            callBasicApi: function() {
                var self = this;
                var vhrno = $.trim($("#vhrno").val());
                var levyStdde = $.trim($("#levyStdde").val()).replace(/-/g, '');
                var vin = $.trim($("#vin").val());

                // NewBasicRequest 형식: record 배열 구조 사용
                // INQ_SE_CD는 VmisRequestEnricher에서 자동 설정됨
                var record = {
                    VHRNO: vhrno,
                    LEVY_CRTR_YMD: levyStdde  // 신규 필드명
                };

                if (vin) {
                    record.VIN = vin;
                }

                var params = {
                    record: [record]  // record 배열로 감싸기
                };

                $.ajax({
                    url: '/carInspectionPenalty/callApi/getBasicInfo.do',
                    type: 'POST',
                    contentType: 'application/json; charset=UTF-8',
                    data: JSON.stringify(params),
                    dataType: 'json',
                    success: function(response) {
                        if (response.success) {
                            console.log("기본사항 조회 성공:", response.data);
                            self.displayBasicResult(response.data);
                            $("#btnResultClose").show();
                        } else {
                            alert("조회 실패\n\n" + (response.message || "알 수 없는 오류가 발생했습니다."));
                            $("#resultContent").html('<div class="result-empty">조회된 데이터가 없습니다.</div>');
                        }
                    },
                    error: function(xhr, status, error) {
                        $("#resultContent").html('<div class="result-empty">조회 중 오류가 발생했습니다.</div>');
                    }
                });
            },

            /**
             * 등록원부 조회 API 호출
             */
            callLedgerApi: function() {
                var self = this;
                var vhrno = $.trim($("#ledgerVhrno").val());
                var cpttrNm = $.trim($("#cpttrNm").val());
                var cpttrIhidnum = $.trim($("#cpttrIhidnum").val());
                var cpttrLegaldongCode = $.trim($("#cpttrLegaldongCode").val());
                var detailExpression = $("#detailExpression").val();

                // NewLedgerRequest의 @JsonProperty에 맞춰 신규 필드명 사용
                // INQ_SE_CD는 VmisRequestEnricher에서 자동으로 "1"(열람)로 설정됨
                var params = {
                    VHRNO: vhrno,
                    CVLPR_NM: cpttrNm,              // 민원인성명 (구: CPTTR_NM)
                    CVLPR_IDECNO: cpttrIhidnum,     // 민원인주민번호 (구: CPTTR_IHIDNUM)
                    PATH_SE_CD: "3",                // 경로구분코드 고정:3 (구: ROUTE_SE_CODE)
                    DSCTN_INDCT: detailExpression   // 내역표시 (구: DETAIL_EXPRESSION)
                };

                // 선택 필드 추가
                if (cpttrLegaldongCode) {
                    params.CVLPR_STDG_CD = cpttrLegaldongCode;  // 민원인법정동코드 (구: CPTTR_LEGALDONG_CODE)
                }

                $.ajax({
                    url: '/carInspectionPenalty/callApi/getLedgerInfo.do',
                    type: 'POST',
                    contentType: 'application/json; charset=UTF-8',
                    data: JSON.stringify(params),
                    dataType: 'json',
                    success: function(response) {
                        if (response.success) {
                            console.log("등록원부 조회 성공:", response.data);
                            self.displayLedgerResult(response.data);
                            $("#btnResultClose").show();
                        } else {
                            alert("조회 실패\n\n" + (response.message || "알 수 없는 오류가 발생했습니다."));
                            $("#resultContent").html('<div class="result-empty">조회된 데이터가 없습니다.</div>');
                        }
                    },
                    error: function(xhr, status, error) {
                        $("#resultContent").html('<div class="result-empty">조회 중 오류가 발생했습니다.</div>');
                    }
                });
            },

            /**
             * 기본사항 조회 결과 표시
             */
            displayBasicResult: function(data) {
                // NewBasicResponse 구조: linkRsltCd, linkRsltDtl, record[]
                // 오류 확인
                if (data.linkRsltCd && data.linkRsltCd !== 'MSG50000') {
                    alert("조회 실패\n\n" + (data.linkRsltDtl || "오류가 발생했습니다."));
                    $("#resultContent").html('<div class="result-empty">조회된 데이터가 없습니다.</div>');
                    return;
                }

                // record 배열에서 첫 번째 항목 추출
                if (!data.record || data.record.length === 0) {
                    $("#resultContent").html('<div class="result-empty">조회된 데이터가 없습니다.</div>');
                    return;
                }

                var html = this.getBasicInfoHtml(data.record[0]);
                $("#resultContent").html(html);
            },

            /**
             * 기본사항 조회 결과 HTML 생성
             * NewBasicResponse.Record 구조에 맞춰 필드명 매핑
             */
            getBasicInfoHtml: function(data) {
                var html = '<div class="result-section-title collapsible-title" data-target="#basicInfoContent">자동차 기본사항 정보<span class="collapse-btn">[접기]</span></div>';
                html += '<div id="basicInfoContent" class="collapsible-content">';
                html += '<table class="result-detail-table">';
                html += '<colgroup><col style="width:20%"><col style="width:30%"><col style="width:20%"><col style="width:30%"></colgroup>';

                // 처리불가 정보
                html += '<tr><th>처리불가사유코드</th><td>' + this.nvl(data.PRCS_IMPRTY_RSN_CD) + '</td>';
                html += '<th>처리불가사유명세</th><td colspan="3">' + this.nvl(data.PRCS_IMPRTY_RSN_DTLS) + '</td></tr>';

                // 기본 정보
                html += '<tr><th>차량번호</th><td>' + this.nvl(data.VHRNO) + '</td>';
                html += '<th>차명</th><td>' + this.nvl(data.ATMB_NM) + '</td></tr>';
                html += '<tr><th>대표소유자성명</th><td>' + this.nvl(data.RPRS_OWNR_NM) + '</td>';
                html += '<th>대표소유자회원번호</th><td>' + this.nvl(data.RPRSV_OWNR_IDECNO) + '</td></tr>';
                html += '<tr><th>대표소유자회원구분코드</th><td>' + this.nvl(data.RPRS_OWNR_MBR_SE_CD) + '</td>';
                html += '<th>대표소유자전화번호</th><td>' + this.nvl(data.RPRS_OWNR_TELNO) + '</td></tr>';

                // 등록 정보
                html += '<tr><th>등록상세코드</th><td>' + this.nvl(data.REG_DTL_CD) + '</td>';
                html += '<th>등록일</th><td>' + this.nvl(data.REG_YMD) + '</td></tr>';
                html += '<tr><th>최초등록일자</th><td>' + this.nvl(data.FRST_REG_YMD) + '</td>';
                html += '<th>최초등록접수번호</th><td>' + this.nvl(data.FRST_REG_APLY_RCPT_NO) + '</td></tr>';
                html += '<tr><th>등록기관명</th><td>' + this.nvl(data.OGNZ_NM) + '</td>';
                html += '<th>특정등록상태코드</th><td>' + this.nvl(data.SPCF_REG_STTS_CD) + '</td></tr>';

                // 말소 정보
                html += '<tr><th>말소등록일</th><td>' + this.nvl(data.ERSR_REG_YMD) + '</td>';
                html += '<th>말소등록구분코드</th><td>' + this.nvl(data.ERSR_REG_SE_CD) + '</td></tr>';
                html += '<tr><th>말소등록구분명</th><td>' + this.nvl(data.ERSR_REG_SE_NM) + '</td>';
                html += '<th>자진말소예방공지일자</th><td>' + this.nvl(data.VLNT_ERSR_PRVNTC_AVTSMT_YMD) + '</td></tr>';

                // 차량 상세 정보
                html += '<tr><th>차대번호</th><td>' + this.nvl(data.VIN) + '</td>';
                html += '<th>제원관리번호</th><td>' + this.nvl(data.SPMNNO) + '</td></tr>';
                html += '<tr><th>형식명</th><td>' + this.nvl(data.FOM_NM) + '</td>';
                html += '<th>원동기형식명</th><td>' + this.nvl(data.MTRS_FOM_NM) + '</td></tr>';
                html += '<tr><th>연식</th><td>' + this.nvl(data.YRIDNW) + '</td>';
                html += '<th>제작년월일</th><td>' + this.nvl(data.FBCTN_YMD) + '</td></tr>';
                html += '<tr><th>색상명</th><td>' + this.nvl(data.COLOR_NM) + '</td>';
                html += '<th>배기량</th><td>' + this.nvl(data.DSPLVL) + '</td></tr>';

                // 차종 정보
                html += '<tr><th>차종종별코드</th><td>' + this.nvl(data.CARMDL_ASORT_CD) + '</td>';
                html += '<th>차종종별명</th><td>' + this.nvl(data.CARMDL_ASORT_NM) + '</td></tr>';
                html += '<tr><th>차종분류코드</th><td>' + this.nvl(data.CARMDL_SE_CD) + '</td>';
                html += '<th>차종분류명</th><td>' + this.nvl(data.CARMDL_CLSF_NM) + '</td></tr>';
                html += '<tr><th>차종유형코드</th><td>' + this.nvl(data.CARMDL_TYPE_CD) + '</td>';
                html += '<th>차종유형명</th><td>' + this.nvl(data.CARMDL_TYPE_NM) + '</td></tr>';

                // 차체 정보
                html += '<tr><th>차체길이</th><td>' + this.nvl(data.CBD_LT) + '</td>';
                html += '<th>차체너비</th><td>' + this.nvl(data.CBD_BT) + '</td></tr>';
                html += '<tr><th>차체높이</th><td>' + this.nvl(data.CBD_HG) + '</td>';
                html += '<th>차량총중량</th><td>' + this.nvl(data.VHCL_TOTL_WT) + '</td></tr>';
                html += '<tr><th>최대적재량</th><td>' + this.nvl(data.MXMM_LDG) + '</td>';
                html += '<th>최초최대적재량</th><td>' + this.nvl(data.FRST_MXMM_LDG) + '</td></tr>';
                html += '<tr><th>승차정원수</th><td>' + this.nvl(data.RDCPCT_CNT) + '</td>';
                html += '<th>구조변경수</th><td>' + this.nvl(data.STRCT_CHG_CNT) + '</td></tr>';

                // 용도 및 연료
                html += '<tr><th>용도구분코드</th><td>' + this.nvl(data.USG_SE_CD) + '</td>';
                html += '<th>사용연료코드</th><td>' + this.nvl(data.USE_FUEL_CD) + '</td></tr>';
                html += '<tr><th>연료소비율</th><td>' + this.nvl(data.FUEL_CNSMPRT) + '</td>';
                html += '<th>전기복합연료소비율</th><td>' + this.nvl(data.ELCTY_CMPND_FUEL_CNSMPRT) + '</td></tr>';

                // 소유자 주소 정보
                html += '<tr><th>소유자법정동코드</th><td>' + this.nvl(data.OWNR_STDG_CD) + '</td>';
                html += '<th>소유자행정동코드</th><td>' + this.nvl(data.OWNR_DONG_CD) + '</td></tr>';
                html += '<tr><th>소유자산여부</th><td>' + this.nvl(data.OWNR_MTN_YN) + '</td>';
                html += '<th>소유자번지</th><td>' + this.nvl(data.OWNR_LNBR) + '</td></tr>';
                html += '<tr><th>소유자호</th><td>' + this.nvl(data.OWNR_HO) + '</td>';
                html += '<th>소유자상세주소</th><td>' + this.nvl(data.OWNR_ADDR_NM) + '</td></tr>';
                html += '<tr><th>소유자도로명코드</th><td>' + this.nvl(data.OWNR_ROAD_NM_CD) + '</td>';
                html += '<th>소유자지하건물구분코드</th><td>' + this.nvl(data.OWNR_UDGD_BLDG_SE_CD) + '</td></tr>';
                html += '<tr><th>소유자건물주요번호</th><td>' + this.nvl(data.OWNR_BMNO) + '</td>';
                html += '<th>소유자건물부번호</th><td>' + this.nvl(data.OWNR_BSNO) + '</td></tr>';
                html += '<tr><th>소유자전체주소</th><td colspan="3">' + this.nvl(data.OWNR_WHOL_ADDR) + '</td></tr>';

                // 사용본거지 주소 정보
                html += '<tr><th>사용본거지법정동코드</th><td>' + this.nvl(data.USGSRHLD_STDG_CD) + '</td>';
                html += '<th>사용본거지행정동코드</th><td>' + this.nvl(data.USGSRHLD_DONG_CD) + '</td></tr>';
                html += '<tr><th>사용본거지관청코드</th><td>' + this.nvl(data.USGSRHLD_GRC_CD) + '</td>';
                html += '<th>사용본거지산여부</th><td>' + this.nvl(data.USGSRHLD_MTN_YN) + '</td></tr>';
                html += '<tr><th>사용본거지번지</th><td>' + this.nvl(data.USGSRHLD_LNBR) + '</td>';
                html += '<th>사용본거지호</th><td>' + this.nvl(data.USGSRHLD_HO) + '</td></tr>';
                html += '<tr><th>사용본거지상세주소</th><td>' + this.nvl(data.USGSRHLD_ADDR_NM) + '</td>';
                html += '<th>사용본거지도로명코드</th><td>' + this.nvl(data.USGSRHLD_ROAD_NM_CD) + '</td></tr>';
                html += '<tr><th>사용본거지지하건물구분코드</th><td>' + this.nvl(data.USGSRHLD_UDGD_BLDG_SE_CD) + '</td>';
                html += '<th>사용본거지건물주요번호</th><td>' + this.nvl(data.USGSRHLD_BMNO) + '</td></tr>';
                html += '<tr><th>사용본거지건물부번호</th><td>' + this.nvl(data.USGSRHLD_BSNO) + '</td>';
                html += '<th>사용본거지전체주소</th><td>' + this.nvl(data.USGSRHLD_WHOL_ADDR) + '</td></tr>';

                // 차량번호 변경 정보
                html += '<tr><th>이전차량번호</th><td>' + this.nvl(data.BFR_VHRNO) + '</td>';
                html += '<th>신차량번호</th><td>' + this.nvl(data.REAR_VHRNO) + '</td></tr>';
                html += '<tr><th>차번호변경시기</th><td>' + this.nvl(data.CHG_YMD) + '</td>';
                html += '<th>이전등록일</th><td>' + this.nvl(data.TRANSR_REG_YMD) + '</td></tr>';

                // 취득 정보
                html += '<tr><th>취득일자</th><td>' + this.nvl(data.ACQS_YMD) + '</td>';
                html += '<th>취득종료일자</th><td>' + this.nvl(data.ACQS_END_YMD) + '</td></tr>';
                html += '<tr><th>취득금액</th><td>' + this.nvl(data.ACQS_AMT) + '</td>';
                html += '<th>차령만료일자</th><td>' + this.nvl(data.VEAG_END_YMD) + '</td></tr>';

                // 번호판 정보
                html += '<tr><th>번호판규격코드</th><td>' + this.nvl(data.NOPLT_SPCFCT_CD) + '</td>';
                html += '<th>번호판영치여부</th><td>' + this.nvl(data.NOPLT_CSDY_YN) + '</td></tr>';
                html += '<tr><th>번호판영치최고일</th><td>' + this.nvl(data.NOPLT_CSDY_AVTSMT_YMD) + '</td>';
                html += '<th>출처구분코드</th><td>' + this.nvl(data.SRC_SE_CD) + '</td></tr>';

                // 검사 정보
                html += '<tr><th>검사유효기간시작일</th><td>' + this.nvl(data.INSP_VLD_PD_BGNG_YMD) + '</td>';
                html += '<th>검사유효기간종료일</th><td>' + this.nvl(data.INSP_VLD_PD_END_YMD) + '</td></tr>';
                html += '<tr><th>주행거리</th><td>' + this.nvl(data.DRVNG_DSTNC) + '</td>';
                html += '<th>-</th><td>-</td></tr>';

                // 저당/압류 정보
                html += '<tr><th>저당수</th><td>' + this.nvl(data.MRTG_CNT) + '</td>';
                html += '<th>압류건수</th><td>' + this.nvl(data.SZR_CNT) + '</td></tr>';

                html += '</table>';
                html += '</div>';
                return html;
            },

            /**
             * 등록원부 조회 결과 표시
             */
            displayLedgerResult: function(data) {
                var html = this.getLedgerInfoHtml(data);
                $("#resultContent").html(html);
            },

            /**
             * 등록원부 조회 결과 HTML 생성
             * NewLedgerResponse 구조에 맞춰 필드명 매핑
             */
            getLedgerInfoHtml: function(data) {
                var html = '<div class="result-section-title collapsible-title" data-target="#ledgerInfoContent">자동차 등록원부 정보<span class="collapse-btn">[접기]</span></div>';
                html += '<div id="ledgerInfoContent" class="collapsible-content">';
                html += '<table class="result-detail-table">';
                html += '<colgroup><col style="width:20%"><col style="width:30%"><col style="width:20%"><col style="width:30%"></colgroup>';
                html += this.getLedgerInfoTableRows(data);
                html += '</table>';
                html += '</div>';

                if (data.record && data.record.length > 0) {
                    html += '<div class="result-section-title collapsible-title" style="margin-top: 30px;" data-target="#ledgerHistoryContent">등록원부 변경 이력 (' + data.record.length + '건)<span class="collapse-btn">[접기]</span></div>';
                    html += '<div id="ledgerHistoryContent" class="collapsible-content">';
                    html += '<table class="result-history-table">';
                    html += '<thead>';
                    html += '<tr>';
                    html += '<th>번호</th><th>해제여부</th><th>변경업무구분코드</th><th>변경업무구분명</th><th>주번호</th><th>부번호</th>';
                    html += '<th>변경일자</th><th>원부그룹번호</th><th>원부개별번호</th><th>접수번호</th><th>차량관리번호</th>';
                    html += '<th>사항란</th><th>세대주명</th><th>세대주개인암호화번호</th><th>상세순번</th><th>표기여부</th>';
                    html += '</tr>';
                    html += '</thead>';
                    html += '<tbody>';

                    for (var i = 0; i < data.record.length; i++) {
                        var rec = data.record[i];
                        html += '<tr>';
                        html += '<td class="text-center">' + (i + 1) + '</td>';
                        html += '<td class="text-center">' + this.nvl(rec.SZR_RMV_DTL_SN) + '</td>';
                        html += '<td class="text-center">' + this.nvl(rec.CHG_TASK_SE_CD) + '</td>';
                        html += '<td class="text-center">' + this.nvl(rec.CHG_TASK_SE_NM) + '</td>';
                        html += '<td class="text-center">' + this.nvl(rec.MAIN_NO) + '</td>';
                        html += '<td class="text-center">' + this.nvl(rec.SNO) + '</td>';
                        html += '<td class="text-center">' + this.nvl(rec.CHG_YMD) + '</td>';
                        html += '<td class="text-center">' + this.nvl(rec.LEDGER_GROUP_NO) + '</td>';
                        html += '<td class="text-center">' + this.nvl(rec.LEDGER_INDIV_NO) + '</td>';
                        html += '<td class="text-center">' + this.nvl(rec.APLY_RCPT_NO) + '</td>';
                        html += '<td class="text-center">' + this.nvl(rec.VHMNO) + '</td>';
                        html += '<td class="text-left">' + this.nvl(rec.SPCABL_MTTR) + '</td>';
                        html += '<td class="text-center">' + this.nvl(rec.HSHLDR_NM) + '</td>';
                        html += '<td class="text-center">' + this.nvl(rec.HSHLDR_IDECNO) + '</td>';
                        html += '<td class="text-center">' + this.nvl(rec.DTL_SN) + '</td>';
                        html += '<td class="text-center">' + this.nvl(rec.FLAG) + '</td>';
                        html += '</tr>';
                    }

                    html += '</tbody>';
                    html += '</table>';
                    html += '</div>';
                }
                return html;
            },

            /**
             * LedgerInfo 테이블 행 생성
             * NewLedgerResponse 구조에 맞춰 필드명 매핑
             */
            getLedgerInfoTableRows: function(data) {
                var html = '';

                // 연계 결과 정보
                html += '<tr><th>연계결과코드</th><td>' + this.nvl(data.LINK_RSLT_CD) + '</td>';
                html += '<th>연계결과상세</th><td>' + this.nvl(data.LINK_RSLT_DTL) + '</td></tr>';

                // 원부 정보
                html += '<tr><th>원부그룹번호</th><td>' + this.nvl(data.LEDGER_GROUP_NO) + '</td>';
                html += '<th>원부개별번호</th><td>' + this.nvl(data.LEDGER_INDIV_NO) + '</td></tr>';

                // 차량 기본 정보
                html += '<tr><th>차량관리번호</th><td>' + this.nvl(data.VHMNO) + '</td>';
                html += '<th>차량번호</th><td>' + this.nvl(data.VHRNO) + '</td></tr>';
                html += '<tr><th>차대번호</th><td>' + this.nvl(data.VIN) + '</td>';
                html += '<th>차명</th><td>' + this.nvl(data.ATMB_NM) + '</td></tr>';

                // 차종 정보
                html += '<tr><th>차종종별코드</th><td>' + this.nvl(data.CARMDL_ASORT_CD) + '</td>';
                html += '<th>차종종별명</th><td>' + this.nvl(data.CARMDL_ASORT_NM) + '</td></tr>';

                // 색상 정보
                html += '<tr><th>색상코드</th><td>' + this.nvl(data.COLOR_CD) + '</td>';
                html += '<th>색상명</th><td>' + this.nvl(data.COLOR_NM) + '</td></tr>';

                // 번호판 정보
                html += '<tr><th>번호판규격코드</th><td>' + this.nvl(data.NOPLT_SPCFCT_CD) + '</td>';
                html += '<th>번호판규격명</th><td>' + this.nvl(data.NOPLT_SPCFCT_NM) + '</td></tr>';
                html += '<tr><th>번호판영치최고일</th><td>' + this.nvl(data.NOPLT_CSDY_AVTSMT_YMD) + '</td>';
                html += '<th>번호판영치여부</th><td>' + this.nvl(data.NOPLT_CSDY_YN) + '</td></tr>';

                // 용도 정보
                html += '<tr><th>용도구분코드</th><td>' + this.nvl(data.USG_SE_CD) + '</td>';
                html += '<th>용도구분명</th><td>' + this.nvl(data.USG_SE_NM) + '</td></tr>';

                // 형식 정보
                html += '<tr><th>원동기형식명</th><td>' + this.nvl(data.MTRS_FOM_NM) + '</td>';
                html += '<th>형식명</th><td>' + this.nvl(data.FOM_NM) + '</td></tr>';

                // 취득 정보
                html += '<tr><th>취득금액</th><td>' + this.nvl(data.ACQS_AMT) + '</td>';
                html += '<th>최초양도일</th><td>' + this.nvl(data.FRST_TRNSFR_YMD) + '</td></tr>';

                // 등록 정보
                html += '<tr><th>등록상세코드</th><td>' + this.nvl(data.REG_DTL_CD) + '</td>';
                html += '<th>등록상세명</th><td>' + this.nvl(data.REG_DTL_NM) + '</td></tr>';
                html += '<tr><th>최초등록일</th><td>' + this.nvl(data.FRST_REG_YMD) + '</td>';
                html += '<th>최초등록접수번호</th><td>' + this.nvl(data.FRST_REG_APLY_RCPT_NO) + '</td></tr>';
                html += '<tr><th>등록신청구분명</th><td>' + this.nvl(data.REG_APLY_SE_NM) + '</td>';
                html += '<th>차령종료일</th><td>' + this.nvl(data.VEAG_END_YMD) + '</td></tr>';

                // 연식 및 제작 정보
                html += '<tr><th>연식</th><td>' + this.nvl(data.YRIDNW) + '</td>';
                html += '<th>제작년월일</th><td>' + this.nvl(data.FBCTN_YMD) + '</td></tr>';
                html += '<tr><th>제원관리번호1</th><td>' + this.nvl(data.SPMNNO_1) + '</td>';
                html += '<th>제원관리번호2</th><td>' + this.nvl(data.SPMNNO_2) + '</td></tr>';

                // 주행 정보
                html += '<tr><th>주행거리</th><td>' + this.nvl(data.DRVNG_DSTNC) + '</td>';
                html += '<th>구동축전지식별번호</th><td>' + this.nvl(data.DRIV_SRGBTRY_IDNTF_NO) + '</td></tr>';

                // 검사 정보
                html += '<tr><th>검사유효기간시작일</th><td>' + this.nvl(data.INSP_VLD_PD_BGNG_YMD) + '</td>';
                html += '<th>검사유효기간종료일</th><td>' + this.nvl(data.INSP_VLD_PD_END_YMD) + '</td></tr>';
                html += '<tr><th>점검유효기간시작일</th><td>' + this.nvl(data.CHCK_VLD_PD_BGNG_YMD) + '</td>';
                html += '<th>점검유효기간종료일</th><td>' + this.nvl(data.CHCK_VLD_PD_END_YMD) + '</td></tr>';

                // 사업용 정보
                html += '<tr><th>사업용사용기간</th><td>' + this.nvl(data.BSS_USE_PD_YMD) + '</td>';
                html += '<th>발급번호</th><td>' + this.nvl(data.ISSU_NO) + '</td></tr>';

                // 말소 정보
                html += '<tr><th>직권말소예고통지일</th><td>' + this.nvl(data.OCTHT_ERSR_PRVNTC_AVTSMT_YMD) + '</td>';
                html += '<th>말소등록일</th><td>' + this.nvl(data.ERSR_REG_YMD) + '</td></tr>';
                html += '<tr><th>말소등록구분코드</th><td>' + this.nvl(data.ERSR_REG_SE_CD) + '</td>';
                html += '<th>말소등록구분명</th><td>' + this.nvl(data.ERSR_REG_SE_NM) + '</td></tr>';

                // 저당/압류/변경 정보
                html += '<tr><th>저당수</th><td>' + this.nvl(data.MRTG_CNT) + '</td>';
                html += '<th>압류건수</th><td>' + this.nvl(data.SZR_CNT) + '</td></tr>';
                html += '<tr><th>구조변경수</th><td>' + this.nvl(data.STRCT_CHG_CNT) + '</td>';
                html += '<th>특기사항건수</th><td>' + this.nvl(data.SPCABL_MTTR_CNT) + '</td></tr>';
                html += '<tr><th>예고수</th><td>' + this.nvl(data.PRVNTC_CNT) + '</td>';
                html += '<th>수출이행여부신고일</th><td>' + this.nvl(data.XPORT_FLFL_YN_DCLR_YMD) + '</td></tr>';

                // 소유자 정보
                html += '<tr><th>대표소유자성명</th><td>' + this.nvl(data.RPRS_OWNR_NM) + '</td>';
                html += '<th>대표소유자회원번호</th><td>' + this.nvl(data.RPRSV_OWNR_IDECNO) + '</td></tr>';
                html += '<tr><th>대표소유자회원구분코드</th><td>' + this.nvl(data.RPRS_OWNR_MBR_SE_CD) + '</td>';
                html += '<th>대표소유자전화번호</th><td>' + this.nvl(data.RPRS_OWNR_TELNO) + '</td></tr>';
                html += '<tr><th>개인사업자여부</th><td>' + this.nvl(data.INDVDL_BZMN_YN) + '</td>';
                html += '<th>비과세대상구분코드명</th><td>' + this.nvl(data.TAXXMPT_APLCN_SE_CD) + '</td></tr>';
                html += '<tr><th>비과세대상구분코드</th><td>' + this.nvl(data.TAXXMPT_TRPR_SE_CD) + '</td>';
                html += '<th>-</th><td>-</td></tr>';

                // 주소 정보
                html += '<tr><th>사용본거지주소</th><td>' + this.nvl(data.USGSRHLD_ADDR_1) + '</td>';
                html += '<th>사용본거지주소상세</th><td>' + this.nvl(data.USGSRHLD_ADDR_DTL_1) + '</td></tr>';
                html += '<tr><th>사용본거지행정동명</th><td>' + this.nvl(data.USGSRHLD_DONG_NM) + '</td>';
                html += '<th>소유자주소</th><td>' + this.nvl(data.OWNR_ADDR) + '</td></tr>';
                html += '<tr><th>소유자주소상세</th><td colspan="3">' + this.nvl(data.OWNR_ADDR_DTL) + '</td></tr>';

                // 처리불가 정보
                html += '<tr><th>처리불가사유코드</th><td>' + this.nvl(data.PROCESS_IMPRTY_RESN_CODE) + '</td>';
                html += '<th>처리불가사유상세</th><td colspan="3">' + this.nvl(data.PROCESS_IMPRTY_RESN_DTLS) + '</td></tr>';

                return html;
            },

            /**
             * null 값 처리
             */
            nvl: function(value, defaultValue) {
                if (value === null || value === undefined || value === '') {
                    return defaultValue || '-';
                }
                return value;
            },

            /**
             * 이벤트 핸들러 설정
             */
            eventBindEvents: function() {
                var self = this;

                // 조회 구분 변경 이벤트
                $("#inqryType").on('change', function() {
                    self.onInqryTypeChange();
                });

                // 조회 버튼 클릭 이벤트
                $("#search_btn").on('click', function() {
                    self.executeSearch();
                });

                // 초기화 버튼 클릭 이벤트
                $("#reset_btn").on('click', function() {
                    // 기본정보 조회 필드 초기화
                    $("#levyStdde").val("${dateUtil:getCurrentDateTime('yyyy-MM-dd')}");
                    $("#vhrno").val("");
                    $("#vin").val("");
                    // 등록원부 조회 필드 초기화
                    $("#ledgerVhrno").val("");
                    $("#cpttrNm").val("");
                    $("#cpttrIhidnum").val("");
                    $("#cpttrLegaldongCode").val("");
                    $("#detailExpression").val("1");
                    // 결과 영역 초기화
                    $("#resultContent").html('<div class="result-empty">조회 버튼을 클릭하여 차량 정보를 조회하세요.</div>');
                    $("#btnResultClose").hide();
                });

                // 결과 닫기 버튼 클릭 이벤트
                $("#btnResultClose").on('click', function() {
                    $("#resultContent").html('<div class="result-empty">조회 버튼을 클릭하여 차량 정보를 조회하세요.</div>');
                    $(this).hide();
                });

                // 엔터키 검색
                $("#vhrno, #vin, #ledgerVhrno, #cpttrNm, #cpttrIhidnum, #cpttrLegaldongCode").on('keypress', function(e) {
                    if (e.which === 13) {
                        e.preventDefault();
                        $("#search_btn").trigger('click');
                    }
                });

                // 섹션 접기/펼치기 이벤트
                $("#resultContent").on('click', '.collapsible-title', function() {
                    var targetId = $(this).data('target');
                    var $content = $(targetId);
                    var $btn = $(this).find('.collapse-btn');

                    $content.slideToggle('fast', function() {
                        if ($content.is(':visible')) {
                            $btn.text('[접기]');
                        } else {
                            $btn.text('[펼치기]');
                        }
                    });
                });
            },

            /**
             * 모듈 초기화
             */
            init: function() {
                console.log("차량 정보 조회 모듈 초기화");

                // 초기 필드 표시/숨김 설정
                this.onInqryTypeChange();

                // 이벤트 핸들러 설정
                this.eventBindEvents();
            }
        };

        // DOM 준비 완료 시 초기화
        $(document).ready(function() {
            VehicleInquiry.init();
        });

        // 전역 네임스페이스에 모듈 노출
        window.VehicleInquiry = VehicleInquiry;

    })(window, jQuery);
</script>
