package incheon.ags.dss.facility.vo;

import incheon.com.cmm.ComDefaultVO;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;
import java.util.List;

/**
 * (외부) 안전진단 이력 VO (20p)
 * (PNU 필드 및 5개 하위 탭 VO 중첩 정의)
 */
@lombok.Getter @lombok.Setter
public class SafetyInspectionVO extends ComDefaultVO {
	
	private String year;
	
    // --- 1.2 시설 개요 ---
    private String bldgName;       // 시설물명
    private String address;        // 소재지
    private String purpose;        // 시설물 종류
    private String approvalYear;   // 준공년도
    private Double totalArea;      // 연면적
    private String floors;         // 층수
    private String structure;      // 구조형식
    private String owner;          // 관리주체
    
    // --- 1.2 진단 정보 ---
    private String inspectionOrder;  // 진단차수
    private String inspectionPeriod; // 진단기간
    private String inspectorCompany; // 진단기관
    private String inspectorNames;   // 진단책임자
    
    // --- (신규) 하단 5개 아코디언 탭 (중첩 VO) ---
    private ResultSummaryVO resultSummary;       // 1. 진단결과 및 종합
    private List<PartDefectVO> partDefects;      // 2. 부위별 결함결과
    private List<MainDefectVO> mainDefects;      // 3. 주요 결함 및 보수
    private List<SafetyManageVO> safetyManage;   // 4. 안전 관리 권고사항
    private List<AttachmentVO> attachments;      // 5. 첨부파일
    

    // --- 5개 하위 탭을 위한 중첩 클래스 정의 ---
    @lombok.Getter @lombok.Setter
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    public static class ResultSummaryVO {
        private String safetyGrade; // 안전등급 (예: B)
        private String summaryText; // 종합의견
    }

    @lombok.Getter @lombok.Setter
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    public static class PartDefectVO {
        private String partName;    // 부위명 (예: 옹벽)
        private String defectType;  // 결함종류 (예: 균열, 누수)
        private String status;      // 상태 (예: B, 보수 필요)
    }

    @lombok.Getter @lombok.Setter
    @NoArgsConstructor
    @AllArgsConstructor
    
    public static class MainDefectVO {
        private String location;       // 위치 (예: 101동 3층 외벽)
        private String defectContent;  // 결함내용
        private String recommendation; // 보수/보강 권고
    }

    @lombok.Getter @lombok.Setter
    @NoArgsConstructor
    @AllArgsConstructor
    
    public static class SafetyManageVO {
        private String category;       // 구분 (예: 안전관리, 유지관리)
        private String recommendation; // 권고사항
    }
    
    @lombok.Getter @lombok.Setter
    @NoArgsConstructor
    @AllArgsConstructor
    
    public static class AttachmentVO {
        private String fileNm;   // 파일명 (예: 01.현장사진.zip)
        private String fileUrl;  // 파일 다운로드 URL
        private Long   fileSize; // 파일 크기
    }
}