# Copyright (c) Huawei Technologies Co., Ltd. 2026-2026. All rights reserved.
# OpenOLC is licensed under Mulan PSL v2.
# You can use this software according to the terms and conditions of the Mulan PSL v2.
# You may obtain a copy of Mulan PSL v2 at:
#         `http://license.coscl.org.cn/MulanPSL2`
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
# See the Mulan PSL v2 for more details.

import logging
import os
from typing import TypeVar, Optional, Type

logger = logging.getLogger(__name__)
T = TypeVar("T")


class EnvConfig:
    """
    通过环境变量获取配置值的工具类
    支持
    - 制定默认值
    - 类型转换(str, int, float, bool 等
    """

    @staticmethod
    def get(
        key: str, default: Optional[T] = None, cast: Optional[Type[T]] = None
    ) -> Optional[T]:
        """
            获取环境变量值
        :param key: 环境变量名称
        :param default: 默认值
        :param cast: 可选的类型转换函数,例如 int float
        :return:
        """
        value = os.getenv(key, default)
        if value is None:
            return default

        if cast is not None:
            try:
                # 特殊处理bool 类型
                if cast is bool:
                    return str(value).lower() in ("true", "1", "yes", "on")
                # 其他类型的转换
                return cast(value)
            except (TypeError, ValueError) as e:
                logging.warning("环境变量 %s 无法转换为 %s: %s", key, cast, e)
                return None
        return value