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

import lombok.Data;

import java.util.ArrayList;
import java.util.List;

/**
 * 서버 상태 정보 DTO
 * 서버의 상태 정보와 하위 인스턴스 목록을 포함하는 데이터 객체입니다.
 */
@Data
public class ServerStatusDTO {
    private String name;            // 서버 이름
    private String text;            // 서버 표시명
    private String hostname;            // 서버 표시명
    private String status;          // 상태(normal, warning, error)
    private int cpu;                // CPU 사용률(%)
    private int memory;             // 메모리 사용률(%)
    private int disk;               // 디스크 사용률(%)
    private List<InstanceDTO> instances = new ArrayList<>();  // 인스턴스 목록

    /**
     * 특정 인스턴스 ID에 해당하는 인스턴스를 찾습니다.
     * @param instanceId 찾을 인스턴스 ID
     * @return 해당 인스턴스 또는 null
     */
    public InstanceDTO findInstance(String instanceId) {
        if (instanceId == null || instances == null) {
            return null;
        }

        for (InstanceDTO instance : instances) {
            if (instanceId.equals(instance.getId())) {
                return instance;
            }
        }

        return null;
    }

    /**
     * 에러 상태의 인스턴스 수를 반환합니다.
     */
    public int getErrorInstanceCount() {
        int count = 0;
        for (InstanceDTO instance : instances) {
            if ("error".equals(instance.getStatus())) {
                count++;
            }
        }
        return count;
    }

    /**
     * 경고 상태의 인스턴스 수를 반환합니다.
     */
    public int getWarningInstanceCount() {
        int count = 0;
        for (InstanceDTO instance : instances) {
            if ("warning".equals(instance.getStatus())) {
                count++;
            }
        }
        return count;
    }

    /**
     * 정상 상태의 인스턴스 수를 반환합니다.
     */
    public int getNormalInstanceCount() {
        int count = 0;
        for (InstanceDTO instance : instances) {
            if ("normal".equals(instance.getStatus())) {
                count++;
            }
        }
        return count;
    }

    /**
     * 비활성 상태의 인스턴스 수를 반환합니다.
     */
    public int getInactiveInstanceCount() {
        int count = 0;
        for (InstanceDTO instance : instances) {
            if ("inactive".equals(instance.getStatus())) {
                count++;
            }
        }
        return count;
    }
}