package incheon.ags.dss.status.web.dto;

import lombok.Builder;
import lombok.Getter;
import java.util.List;
import java.util.Collections;
import java.util.stream.Collectors;

import incheon.ags.dss.status.vo.AnaIdctMstVO;

@Getter
@Builder
public class AnaIdctResponseDTO {

    /* Master 정보 */
    private String idctId;      // 지표 ID
    private String idctNm;      // 지표명
    private String idctClsf;    // 지표 분류
    private String idctExpln;   // 지표 설명
    private String sysIdctYn;   // 시스템 지표 여부
    private String userId;      // 사용자 ID
    private String frstRegDt;   // 등록일시

    /* Detail 정보 리스트 */
    private List<Item> itemList;

    /**
     * 상세 항목 DTO (Inner Class)
     */
    @Getter
    @Builder
    public static class Item {
        private String artclType;       // 항목유형
        private String statsArtcl;      // 코드
        private String statsArtclNm;    // 한글명 (화면표시용)
        private String statsArtclPath;  // 코드경로 (화면표시용)
        private String statsArtclNmPath;// 이름경로 (화면표시용)
    }

    /**
     * [Single] VO -> DTO 변환 메서드
     */
    public static AnaIdctResponseDTO from(AnaIdctMstVO vo) {
        if (vo == null) return null;

        // 1. 자식 리스트 변환 (VO List -> DTO List)
        List<Item> items = null;
        if (vo.getItemList() != null) {
            items = vo.getItemList().stream()
                    .map(item -> Item.builder()
                            .artclType(item.getArtclType())
                            .statsArtcl(item.getStatsArtcl())
                            .statsArtclNm(item.getStatsArtclNm())
                            .statsArtclPath(item.getStatsArtclPath())
                            .statsArtclNmPath(item.getStatsArtclNmPath())
                            .build())
                    .collect(Collectors.toList());
        }

        // 2. 부모 변환 및 자식 주입
        return AnaIdctResponseDTO.builder()
                .idctId(vo.getIdctId())
                .idctNm(vo.getIdctNm())
                .idctClsf(vo.getIdctClsf())
                .idctExpln(vo.getIdctExpln())
                .sysIdctYn(vo.getSysIdctYn())
                .userId(vo.getUserId())
                // 날짜 포맷팅 (필요 시 DateUtil 사용 권장)
                .frstRegDt(vo.getFrstRegDt() != null ? vo.getFrstRegDt().toString() : "") 
                .itemList(items)
                .build();
    }

    /**
     * [List] List<VO> -> List<DTO> 변환 메서드 (추가됨)
     */
    public static List<AnaIdctResponseDTO> from(List<AnaIdctMstVO> list) {
        if (list == null || list.isEmpty()) {
            return Collections.emptyList();
        }
        return list.stream()
                .map(AnaIdctResponseDTO::from)
                .collect(Collectors.toList());
    }
}