package com.eactive.eai.custom.statistics.config;

import org.springframework.stereotype.Component;

import com.eactive.eai.common.property.PropManager;
import com.eactive.eai.common.util.Logger;

import lombok.RequiredArgsConstructor;

/**
 * API 통계 설정 관리 - PropManager를 통해 운영 중 동적 변경 가능한 설정값 관리
 */
@Component
@RequiredArgsConstructor
public class ApiStatsConfig {

	private static final Logger logger = Logger.getLogger(Logger.LOGGER_DEFAULT);

	/** PropManager 그룹명 */
	private static final String GROUP_NAME = "ApiStats";

	/** 기본값 상수 */
	private static final boolean DEFAULT_ENABLED = true;
	private static final boolean DEFAULT_MINUTE_ENABLED = true;
	private static final boolean DEFAULT_HOUR_ENABLED = false;

	private final PropManager propManager;

	/**
	 * 통계 수집 활성화 여부 (전체 ON/OFF) - true: 통계 수집 활성화 (기본값) - false: 통계 수집 비활성화
	 */
	public boolean isEnabled() {
		try {
			String value = propManager.getProperty(GROUP_NAME, "enabled", String.valueOf(DEFAULT_ENABLED));
			return Boolean.parseBoolean(value);
		} catch (Exception e) {
			logger.debug("Failed to get enabled from PropManager, using default: " + DEFAULT_ENABLED);
			return DEFAULT_ENABLED;
		}
	}

	/**
	 * 분단위 통계 수집 활성화 여부 - true: 분단위 통계 수집 활성화 (기본값) - false: 분단위 통계 수집 비활성화 - 전체
	 * enabled가 false이면 이 설정과 무관하게 비활성화됨
	 */
	public boolean isMinuteEnabled() {
		if (!isEnabled()) {
			return false;
		}
		try {
			String value = propManager.getProperty(GROUP_NAME, "minute.enabled",
					String.valueOf(DEFAULT_MINUTE_ENABLED));
			return Boolean.parseBoolean(value);
		} catch (Exception e) {
			logger.debug("Failed to get minute.enabled from PropManager, using default: " + DEFAULT_MINUTE_ENABLED);
			return DEFAULT_MINUTE_ENABLED;
		}
	}

	/**
	 * 시간별 통계 수집 활성화 여부 - true: 시간별 통계 수집 활성화 (기본값) - false: 시간별 통계 수집 비활성화 - 전체
	 * enabled가 false이면 이 설정과 무관하게 비활성화됨
	 */
	public boolean isHourEnabled() {
		if (!isEnabled()) {
			return false;
		}
		try {
			String value = propManager.getProperty(GROUP_NAME, "hour.enabled", String.valueOf(DEFAULT_HOUR_ENABLED));
			return Boolean.parseBoolean(value);
		} catch (Exception e) {
			logger.debug("Failed to get hour.enabled from PropManager, using default: " + DEFAULT_HOUR_ENABLED);
			return DEFAULT_HOUR_ENABLED;
		}
	}

	/**
	 * 설정값 로깅 (초기화 시)
	 */
	public void logCurrentConfig() {
		logger.info("ApiStatsConfig] enabled = " + isEnabled());
		logger.info("ApiStatsConfig] minute.enabled = " + isMinuteEnabled());
		logger.info("ApiStatsConfig] hour.enabled = " + isHourEnabled());
	}
}
