import os
from pathlib import Path
from dotenv import load_dotenv

# 尽量兼容多种 .env 放置方式
BASE_DIR = Path(__file__).resolve().parent.parent  # /home/.../4an
# 1. 优先加载项目根目录 .env
load_dotenv(BASE_DIR / '.env')
# 2. 兼容放在 app 目录下的 .env
load_dotenv(BASE_DIR / 'app' / '.env')
# 3. 再加载一次默认搜索路径（当前工作目录及其父级）
load_dotenv()


class Config:
    """配置类，支持从环境变量获取配置
    环境变量优先级高于默认值，可在系统环境变量中设置这些参数
    """
    SECRET_KEY = os.environ.get('SECRET_KEY', os.urandom(24))
    # 优先读取 SQLALCHEMY_DATABASE_URI，兼容旧配置；否则回退到 DATABASE_URI
    SQLALCHEMY_DATABASE_URI = os.environ.get('SQLALCHEMY_DATABASE_URI') or os.environ.get('DATABASE_URI')
    SQLALCHEMY_ENGINE_OPTIONS = {
        'pool_pre_ping': True,             # 每次取连接前验证是否可用
        'pool_recycle': 1800,              # 连接空闲 30 分钟后自动回收重建
        'pool_timeout': 10,                # 等待连接池超时（秒）
        'connect_args': {
            'connect_timeout': 5,          # 连接 MySQL 超时
            'read_timeout': 15,            # 读取超时
            'write_timeout': 15,           # 写入超时
        },
    }
    LZMX_WEBHOOK_URL = os.environ.get('LZMX_WEBHOOK_URL')
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    UPLOAD_FOLDER = os.environ.get('UPLOAD_FOLDER', 'static/uploads')
    ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg'}
    
    # 添加1key110数据库配置
    KEY110_DB = {
        'host': os.environ.get('KEY110_DB_HOST'),
        'user': os.environ.get('KEY110_DB_USER'),
        'password': os.environ.get('KEY110_DB_PASSWORD'),
        'database': os.environ.get('KEY110_DB_DATABASE')
    }
    
    # Casdoor 配置
    CASDOOR_ENDPOINT = os.environ.get('CASDOOR_ENDPOINT', 'http://localhost:8000')
    CASDOOR_CLIENT_ID = os.environ.get('CASDOOR_CLIENT_ID')
    CASDOOR_CLIENT_SECRET = os.environ.get('CASDOOR_CLIENT_SECRET')
    CASDOOR_ORGANIZATION_NAME = os.environ.get('CASDOOR_ORGANIZATION_NAME', 'built-in')
    CASDOOR_APPLICATION_NAME = os.environ.get('CASDOOR_APPLICATION_NAME', 'app-built-in')
    CASDOOR_REDIRECT_URI = os.environ.get('CASDOOR_REDIRECT_URI', 'http://localhost:18061/callback')
    # 项目名称（用于与 Casdoor 用户标签匹配权限）
    PROJECT_NAME = os.environ.get('PROJECT_NAME')

    # 会话 Cookie 配置（跨域 SSO 时建议设置）
    SESSION_COOKIE_SAMESITE = os.environ.get('SESSION_COOKIE_SAMESITE', 'Lax')
    SESSION_COOKIE_SECURE = os.environ.get('SESSION_COOKIE_SECURE', 'False').lower() == 'true'