"""
Cd预测集成配置文件
@description: 管理Cd预测功能集成到AcidMap系统的相关配置
@author: AcidMap Team
@version: 1.0.0
"""

import os
from typing import Dict, Any

class CdPredictionConfig:
    """
    Cd预测配置类
    
    @description: 管理Cd预测系统在AcidMap中的配置信息
    @example
    >>> config = CdPredictionConfig()
    >>> print(config.get_cd_system_path())
    """
    
    def __init__(self):
        """
        初始化配置
        
        @description: 设置基本路径和配置信息
        """
        # 获取项目根目录
        self.project_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
        
        # Cd预测系统路径
        self.cd_system_path = os.path.join(self.project_root, "Cd_Prediction_Integrated_System")
        
        # 输出目录配置
        self.output_base_dir = os.path.join(self.project_root, "app", "static", "cd_predictions")
        
        # 子目录配置
        self.directories = {
            "figures": os.path.join(self.output_base_dir, "figures"),
            "raster": os.path.join(self.output_base_dir, "raster"),
            "reports": os.path.join(self.output_base_dir, "reports"),
            "data": os.path.join(self.output_base_dir, "data")
        }
        
        # API响应配置
        self.api_config = {
            "max_prediction_files": 10,  # 最多保留的预测文件数量
            "file_cleanup_days": 7,      # 文件清理天数
            "default_image_format": "jpg",
            "supported_formats": ["jpg", "png", "tiff"]
        }
        
        # 确保目录存在
        self._ensure_directories()
    
    def _ensure_directories(self):
        """
        确保所有必要的目录存在
        
        @description: 创建输出目录结构
        """
        # 创建基础输出目录
        os.makedirs(self.output_base_dir, exist_ok=True)
        
        # 创建子目录
        for directory in self.directories.values():
            os.makedirs(directory, exist_ok=True)
    
    def get_cd_system_path(self) -> str:
        """
        获取Cd预测系统路径
        
        @returns {str} Cd预测系统的绝对路径
        """
        return self.cd_system_path
    
    def get_output_dir(self, dir_type: str = "base") -> str:
        """
        获取输出目录路径
        
        @param {str} dir_type - 目录类型 (base/figures/raster/reports/data)
        @returns {str} 指定类型的输出目录路径
        @throws {KeyError} 当目录类型不存在时抛出
        """
        if dir_type == "base":
            return self.output_base_dir
        
        if dir_type not in self.directories:
            raise KeyError(f"不支持的目录类型: {dir_type}")
        
        return self.directories[dir_type]
    
    def get_api_config(self) -> Dict[str, Any]:
        """
        获取API配置信息
        
        @returns {Dict[str, Any]} API相关配置
        """
        return self.api_config.copy()
    
    def get_full_config(self) -> Dict[str, Any]:
        """
        获取完整配置信息
        
        @returns {Dict[str, Any]} 所有配置信息
        """
        return {
            "project_root": self.project_root,
            "cd_system_path": self.cd_system_path,
            "output_base_dir": self.output_base_dir,
            "directories": self.directories.copy(),
            "api_config": self.api_config.copy()
        }

# 全局配置实例
cd_config = CdPredictionConfig() 