#!/bin/zsh
# ─────────────────────────────────────────────────────────────
#  Método Mesa Limpa™ — o mover
#  Uso:  zsh mover.zsh <pasta-alvo> <plano.tsv>
#
#  plano.tsv = uma linha por arquivo:   destino<TAB>nome do arquivo
#    ex:  02 - PROVA SOCIAL/Depoimentos em vídeo<TAB>Gravação de Tela 2026-07-06.mov
#
#  Este script SÓ MOVE. Nunca apaga. Nunca sobrescreve.
#  Gera <alvo>/.organizacao/manifesto.tsv e <alvo>/.organizacao/DESFAZER.zsh
# ─────────────────────────────────────────────────────────────
set -u

D="${1:?uso: mover.zsh <pasta-alvo> <plano.tsv>}"
PLANO="${2:?uso: mover.zsh <pasta-alvo> <plano.tsv>}"

[[ -d "$D" ]]     || { print "Pasta não existe: $D"; exit 1 }
[[ -f "$PLANO" ]] || { print "Plano não existe: $PLANO"; exit 1 }

ORG="$D/.organizacao"
MAN="$ORG/manifesto.tsv"
UNDO="$ORG/DESFAZER.zsh"
mkdir -p "$ORG"

# append: rodar de novo não perde o histórico da rodada anterior
[[ -f "$MAN" ]] || : > "$MAN"
if [[ ! -f "$UNDO" ]]; then
  print '#!/bin/zsh\n# Desfaz a organização: devolve cada arquivo pra raiz da pasta.\nset -u' > "$UNDO"
fi

moved=0; failed=0; skipped=0

while IFS=$'\t' read -r dest nome; do
  [[ -z "${dest:-}" || -z "${nome:-}" ]] && continue
  [[ "$dest" == \#* ]] && continue                      # comentário no plano

  src="$D/$nome"
  dstdir="$D/$dest"

  if [[ ! -e "$src" ]]; then
    if [[ -e "$dstdir/$nome" ]]; then
      ((skipped++))                                     # já movido numa rodada anterior
    else
      print "FALTOU: $nome"
      ((failed++))
    fi
    continue
  fi

  mkdir -p "$dstdir"

  if [[ -e "$dstdir/$nome" ]]; then                     # nunca sobrescreve
    print "JÁ EXISTE NO DESTINO (pulei): $nome"
    ((failed++))
    continue
  fi

  if mv "$src" "$dstdir/" 2>/dev/null; then
    print "$dest\t$nome" >> "$MAN"
    print "mv \"\$1/$dest/$nome\" \"\$1/\" 2>/dev/null" >> "$UNDO"
    ((moved++))
  else
    print "ERRO AO MOVER: $nome"
    ((failed++))
  fi
done < "$PLANO"

chmod +x "$UNDO"

print ""
print "════════ RESULTADO ════════"
print "Movidos: $moved | Falhas: $failed | Já estavam no lugar: $skipped"
print ""
print "Manifesto:  $MAN"
print "Desfazer:   zsh \"$UNDO\" \"$D\""
print ""
print "Sobrou na raiz (fora as pastas):"
ls -1p "$D" | grep -v '/$'
