# 实验: 把颜色实体块移到 DATA 段末尾 (复刻 inject-colors 的成功布局), 并全量重编号
# 用法: powershell -NoProfile -ExecutionPolicy Bypass -File tools\reorder-colors.ps1 -In a.step -Out b.step
param([string]$In, [string]$Out)
$lines = Get-Content $In

# 切分: 头部(至 DATA;) / 实体区 / 尾部(ENDSEC; 起)
$dataIdx = 0
for ($i = 0; $i -lt $lines.Count; $i++) { if ($lines[$i] -eq 'DATA;') { $dataIdx = $i; break } }
$endIdx = $lines.Count - 1
for ($i = $dataIdx; $i -lt $lines.Count; $i++) { if ($lines[$i] -eq 'ENDSEC;') { $endIdx = $i; break } }
$head = $lines[0..$dataIdx]
$ents = $lines[($dataIdx + 1)..($endIdx - 1)]
$foot = $lines[$endIdx..($lines.Count - 1)]

# 实体区再分: 几何区 / 颜色区 / 尾部区
$colorStart = -1; $tailStart = -1
for ($i = 0; $i -lt $ents.Count; $i++) {
  if ($colorStart -lt 0 -and $ents[$i] -match '=COLOUR_RGB\(') { $colorStart = $i }
  if ($tailStart -lt 0 -and $ents[$i] -match '=SHAPE_REPRESENTATION\(') { $tailStart = $i }
}
if ($colorStart -lt 0 -or $tailStart -lt 0) { Write-Output "结构不识别"; exit 1 }
$geo    = $ents[0..($colorStart - 1)]
$colors = $ents[$colorStart..($tailStart - 1)]
$tail   = $ents[$tailStart..($ents.Count - 1)]
$newEnts = @($geo) + @($tail) + @($colors)     # 新顺序: 几何 → 尾部 → 颜色

# 全量重编号
$map = @{}
$next = 1
foreach ($l in $newEnts) {
  $m = [regex]::Match($l, '^#(\d+)=')
  if ($m.Success) { $map[$m.Groups[1].Value] = $next; $next++ }
}
$renum = $newEnts | ForEach-Object {
  [regex]::Replace($_, '#\d+', { param($mm) $id = $mm.Value.Substring(1); if ($map.ContainsKey($id)) { return '#' + $map[$id] } else { return $mm.Value } })
}

$content = @($head) + @($renum) + @($foot)
[System.IO.File]::WriteAllLines($Out, [string[]]$content, (New-Object System.Text.UTF8Encoding($false)))
Write-Output ("重排完成: 几何 " + $geo.Count + " 行 + 尾部 " + $tail.Count + " 行 + 颜色 " + $colors.Count + " 行 → " + $Out)
