# -*- coding: utf-8 -*-
"""Project-level Server Manager config directory helpers."""

from .shared import *

def get_server_manager_config_dir(server_root: Union[str, Path]) -> Path:
    """工具托管的项目配置目录：项目根/.server_manager/config（default.kv、tool.config、模板等）。"""
    return Path(server_root).resolve() / '.server_manager' / 'config'


def get_bundled_tool_config_template_dir() -> Path:
    """软件自带的 config 模板目录（安装后与 main.exe 同级下的 config/）。
    源码运行时使用仓库根目录的 resources/config（与安装包内容一致）。
    """
    if getattr(sys, 'frozen', False):
        return Path(sys.executable).resolve().parent / 'config'
    return Path(__file__).resolve().parents[3] / 'resources' / 'config'


def sync_server_manager_config_templates(project_root: Path) -> Tuple[bool, str]:
    """将软件自带的受管模板文件同步到项目 .server_manager/config。"""
    project_root = Path(project_root).resolve()
    src = get_bundled_tool_config_template_dir()
    dst = get_server_manager_config_dir(project_root)

    if not src.is_dir():
        return False, (
            f'找不到软件自带的配置模板目录: {src}\n'
            '请确认安装目录下存在 config 文件夹，或开发环境已准备 resources/config。'
        )
    if not (src / 'default.kv').exists():
        return False, (
            f'软件配置模板不完整（缺少 default.kv）: {src}'
        )

    try:
        dst.mkdir(parents=True, exist_ok=True)
        for file_name in MANAGED_CONFIG_TEMPLATE_FILES:
            src_file = src / file_name
            if not src_file.exists():
                return False, f'软件配置模板不完整（缺少 {file_name}）: {src}'
            shutil.copy2(src_file, dst / file_name)
    except Exception as e:
        return False, f'同步软件配置模板到项目失败: {e}'

    return True, ""


def ensure_server_manager_config(project_root: Path) -> Tuple[bool, str]:
    """确保项目存在 .server_manager/config，并同步受管模板文件。"""
    project_root = Path(project_root).resolve()
    sm = get_server_manager_config_dir(project_root)

    try:
        if not sm.is_dir():
            (project_root / '.server_manager').mkdir(parents=True, exist_ok=True)
    except Exception as e:
        return False, f'创建项目配置目录失败: {e}'

    return sync_server_manager_config_templates(project_root)


def ensure_and_get_server_manager_config_dir(project_root: Path) -> Tuple[Optional[Path], str]:
    """确保存在工具配置目录且含 default.kv；成功返回该目录 Path。"""
    ok, err = ensure_server_manager_config(project_root)
    if not ok:
        return None, err
    cfg = get_server_manager_config_dir(project_root)
    if not (cfg / 'default.kv').exists():
        return None, (
            '项目配置不完整：.server_manager/config 下缺少 default.kv'
            '（请检查软件安装目录下 config 模板是否完整）'
        )
    return cfg, ""


def project_has_default_kv_for_manager(project_root: Union[str, Path]) -> bool:
    """用于最近项目列表等：是否存在可识别的 default.kv（含尚未迁移的 config/）。"""
    p = Path(project_root)
    return (
        (get_server_manager_config_dir(p) / 'default.kv').exists()
        or (p / 'config' / 'default.kv').exists()
    )
