"""
Setup helper functions for interactive configuration guidance.
"""
from __future__ import annotations

from ..config import (
    ConnectionProfile,
    EnvVars,
    generate_env_var_commands,
    need_setup,
    save_profiles,
    load_config,
)


def run_setup(
    description: str | None = None,
    env_name: str = "test",
    hosts_env_var: str | None = None,
    username_env_var: str | None = None,
    password_env_var: str | None = None,
) -> dict:
    """
    执行配置。

    Args:
        description: 连接描述
        env_name: 环境名称 (test/uat/prod)
        hosts_env_var: hosts 环境变量名
        username_env_var: username 环境变量名（可为空）
        password_env_var: password 环境变量名

    Returns:
        配置结果
    """
    # 验证必填参数
    if not hosts_env_var:
        return {
            "success": False,
            "message": "hosts 环境变量名不能为空",
        }

    if not password_env_var:
        return {
            "success": False,
            "message": "password 环境变量名不能为空",
        }

    # 生成 profile 名称
    profile_name = f"{env_name}-{hosts_env_var.lower().replace('_', '-')}"

    # 构建 profile
    profile = ConnectionProfile(
        name=profile_name,
        env=env_name,
        description=description,
        skip_product_check=True,
        env_vars=EnvVars(
            hosts=hosts_env_var,
            username=username_env_var,
            password=password_env_var,
        ),
    )

    # 保存配置
    save_profiles([profile], has_prompted_setup=True)

    # 生成环境变量设置命令
    env_commands = generate_env_var_commands(profile)

    message = f"""配置已保存到 profiles.json

Profile: {profile_name}
描述: {description or '无'}
环境: {env_name}

请在您的 shell 配置文件中添加以下环境变量并填入实际值：

┌────────────────────────────────────────────────────────┐
│  # Elasticsearch MCP - {env_name} 环境配置                 │
│                                                        │
│  {env_commands}
│                                                        │
│  # 配置完成后请运行: source ~/.zshrc (或对应配置文件)        │
└────────────────────────────────────────────────────────┘
"""

    return {
        "success": True,
        "message": message,
        "profile_name": profile_name,
    }


def do_check_setup_status() -> dict:
    """
    检查当前配置状态。
    """
    config = load_config()
    profiles_count = len(config.profiles)

    return {
        "need_setup": need_setup(),
        "profiles_count": profiles_count,
        "has_prompted_setup": config.has_prompted_setup,
    }
