package com.eactive.eai.rms.onl.dashboard.modern.dto;

import lombok.Data;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 어댑터 상태 요약 컨테이너 DTO
 * 모든 어댑터 유형의 상태 요약 정보를 담는 컨테이너입니다.
 */
@Data
public class AdapterStatusSummaryContainerDTO {
    private Map<String, AdapterStatusSummaryDTO> adapterSummaries;
    private String overallStatus;   // 전체 상태 (normal, warning, error, inactive)

    public AdapterStatusSummaryContainerDTO() {
        this.adapterSummaries = new HashMap<>();
        this.overallStatus = "normal";

        // 기본 어댑터 유형 초기화 (Socket, HTTP만 포함, Socket2는 Socket으로 통합)
        adapterSummaries.put("Socket", new AdapterStatusSummaryDTO("Socket"));
        adapterSummaries.put("HTTP", new AdapterStatusSummaryDTO("HTTP"));
    }

    /**
     * 특정 어댑터 유형의 상태 요약 정보를 반환합니다.
     * @param adapterType 어댑터 유형
     * @return 해당 어댑터 유형의 상태 요약 정보
     */
    public AdapterStatusSummaryDTO getAdapterSummary(String adapterType) {
        return adapterSummaries.get(adapterType);
    }

    /**
     * 모든 어댑터 유형의 상태 요약 정보를 리스트로 반환합니다.
     * @return 어댑터 상태 요약 정보 리스트
     */
    public List<AdapterStatusSummaryDTO> getAdapterSummaryList() {
        return new ArrayList<>(adapterSummaries.values());
    }

    /**
     * 전체 상태를 업데이트합니다.
     */
    public void updateOverallStatus() {
        boolean hasError = false;
        boolean hasWarning = false;
        boolean hasNormal = false;

        for (AdapterStatusSummaryDTO summary : adapterSummaries.values()) {
            if ("error".equals(summary.getOverallStatus())) {
                hasError = true;
            } else if ("warning".equals(summary.getOverallStatus())) {
                hasWarning = true;
            } else if ("normal".equals(summary.getOverallStatus())) {
                hasNormal = true;
            }
        }

        if (hasError) {
            overallStatus = "error";
        } else if (hasWarning) {
            overallStatus = "warning";
        } else if (hasNormal) {
            overallStatus = "normal";
        } else {
            overallStatus = "inactive";
        }
    }
}