@startuml offline-installer-logic
title 离线安装程序执行逻辑

start

:读取程序所在目录;

partition "资源检查" {
  :读取 resources.json;
  note right
    包含:
    - uv 安装包路径
    - Java JRE 安装包路径
    - 校验和信息
  end note

  :检查必需资源文件;

  if (所有资源存在?) then (是)
    :验证文件校验和;
    if (校验通过?) then (是)
      :继续安装;
    else (否)
      :报告损坏的文件;
      :提示重新下载;
      stop
    endif
  else (否)
    :列出缺失的资源;
    :显示下载链接;
    stop
  endif
}

partition "安装模式" {
  if (有 --silent 参数?) then (是)
    :静默安装模式;
    :使用默认配置;
  else (否)
    :交互式安装;
    :显示安装选项;
    :等待用户确认;
  endif
}

partition "执行安装" {
  :=== 安装 uv ===;

  if (Windows?) then (是)
    :解压 uv Windows 包;
    :添加到用户 PATH;
  else (Linux)
    :解压 uv Linux 包;
    :安装到 ~/.local/bin;
    :更新 shell 配置;
  endif

  :验证 uv 可用;

  :=== 安装 Python ===;
  :运行 uv python install;
  note right: 使用 uv 管理 Python
  :验证 Python 可用;

  :=== 安装 Java JRE ===;

  if (Windows?) then (是)
    if (MSI 安装包?) then (是)
      :运行 MSI 静默安装;
    else (ZIP 包)
      :解压到指定目录;
      :配置 JAVA_HOME;
      :添加到 PATH;
    endif
  else (Linux)
    :解压 tarball 到 /opt/java;
    :创建符号链接;
    :更新 alternatives;
  endif

  :验证 Java 可用;
}

partition "aide 配置" {
  :检测 aide-program 位置;
  :添加 aide 到 PATH;

  if (Windows?) then (是)
    :更新用户环境变量;
  else (Linux)
    :追加到 shell 配置文件;
  endif
}

:=== 安装验证 ===;

:显示安装结果;
note right
  - uv 版本
  - Python 版本
  - Java 版本
  - aide 路径
end note

:运行 aide env ensure --runtime;

if (全部通过?) then (是)
  :安装成功;
  :显示后续使用提示;
else (否)
  :显示失败项;
  :提供故障排除建议;
endif

stop
@enduml
