#!/usr/bin/env bash
set -euo pipefail

if [[ "$#" -ne 1 ]]; then
  printf 'usage: %s <starter-directory>\n' "$0" >&2
  exit 64
fi

lab_root="$1"
if [[ ! -d "$lab_root" ]]; then
  printf 'starter directory not found: %s\n' "$lab_root" >&2
  exit 1
fi

expected_paths='README.md
config
config/README.md
data
data/README.md
notes
notes/README.md
output
output/README.md
scripts
scripts/README.md'
actual_paths="$(
  cd "$lab_root"
  find . -mindepth 1 -print | sed 's#^\./##' | LC_ALL=C sort
)"
if [[ "$actual_paths" != "$expected_paths" ]]; then
  printf 'starter tree must contain exactly README.md and the five documented directories: %s\n' "$lab_root" >&2
  printf 'received entries:\n%s\n' "$actual_paths" >&2
  exit 1
fi

check_file() {
  local relative_path="$1"
  local expected_content="$2"
  local readme_path="${lab_root}/${relative_path}"
  local mode

  if [[ ! -f "$readme_path" || -L "$readme_path" ]]; then
    printf 'starter checkpoint must include a non-symlink regular file: %s\n' "$readme_path" >&2
    exit 1
  fi
  mode="$(LC_ALL=C ls -ld "$readme_path")"
  mode="${mode%% *}"
  if [[ "$mode" == *[xstST]* ]]; then
    printf 'starter README must not be executable: %s\n' "$readme_path" >&2
    exit 1
  fi
  if ! cmp -s "$expected_content" "$readme_path"; then
    printf 'starter README must match the documented content exactly: %s\n' "$readme_path" >&2
    exit 1
  fi
}

check_file 'README.md' <(cat <<'EXPECTED'
# dev-lab

这是 Sonnet Pages“开发环境”模块使用的安全练习目录。

## 当前状态

- 已进入统一的 Linux/Unix 命令行主线；
- 已创建练习目录和说明文件；
- 尚未初始化 Git 仓库；
- 尚未创建脚本、配置或样例数据。

后续教程只在这个练习目录中执行示例操作，不使用读者的真实项目。
EXPECTED
)
check_file 'config/README.md' <(cat <<'EXPECTED'
# dev-lab 配置

这里将保存仅属于练习项目的配置示例。不要把真实账户、密钥或系统配置文件放入此目录。
EXPECTED
)
check_file 'data/README.md' <(cat <<'EXPECTED'
# dev-lab 数据

这里将保存后续练习使用的可公开、可重建的样例数据，不放个人数据或不可恢复的原始资料。
EXPECTED
)
check_file 'notes/README.md' <(cat <<'EXPECTED'
# dev-lab 笔记

这里记录命令观察、故障现象与练习结论，便于在后续教程中回看自己的学习证据。
EXPECTED
)
check_file 'output/README.md' <(cat <<'EXPECTED'
# dev-lab 输出

这里将保存由练习明确生成、可以安全重新创建的输出文件；不要把唯一副本当作练习输出。
EXPECTED
)
check_file 'scripts/README.md' <(cat <<'EXPECTED'
# dev-lab 脚本

这里将保存后续教程编写的小型练习脚本。执行前先阅读脚本内容，并只在 dev-lab 中运行。
EXPECTED
)

printf 'starter checkpoint: ok\n'
