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

# ============================================================
# process-emkt.sh
# Processa ZIPs de email marketing e converte para o padrão
# do repositório (pasta NNN_p1003 com imagens numeradas e
# HTML padronizado com URLs absolutas).
# Compatível com bash 3.x (macOS default).
# ============================================================

REPO_DIR="$(cd "$(dirname "$0")/.." && pwd)"
CDN_BASE="https://emkts.stanparcerias.com.br"
SUFFIX="p1003"

# ── Helpers ──────────────────────────────────────────────────

die()  { echo "ERRO: $*" >&2; exit 1; }
info() { echo "→ $*"; }

next_id() {
  local max=0
  for dir in "$REPO_DIR"/*_${SUFFIX}; do
    [ -d "$dir" ] || continue
    num="${dir##*/}"
    num="${num%%_*}"
    if [[ "$num" =~ ^[0-9]+$ ]] && (( num > max )); then
      max=$num
    fi
  done
  echo $(( max + 1 ))
}

# ── Processa um ZIP ─────────────────────────────────────────

process_zip() {
  local zip_path="$1"
  local id="$2"
  local folder_name="${id}_${SUFFIX}"
  local dest="$REPO_DIR/$folder_name"
  local tmp
  tmp="$(mktemp -d)"

  info "Processando: $(basename "$zip_path") → $folder_name"

  # 1. Extrair (ignora warnings do unzip, ex: entrada "/" com caminho absoluto)
  #    Validação real é feita nos passos 3 e 4 (HTML + pasta images/)
  unzip -qo "$zip_path" -d "$tmp" 2>/dev/null || true

  # 2. Limpar lixo macOS
  rm -rf "$tmp/__MACOSX"

  # 3. Encontrar o HTML
  local html_file
  html_file="$(find "$tmp" -maxdepth 1 \( -name '*.html' -o -name '*.htm' \) | head -1)"
  [ -n "$html_file" ] || die "Nenhum HTML encontrado em: $(basename "$zip_path")"

  # 4. Encontrar pasta de imagens
  local img_src="$tmp/images"
  [ -d "$img_src" ] || die "Pasta images/ não encontrada em: $(basename "$zip_path")"

  # 5. Criar pasta destino
  mkdir -p "$dest/images"

  # 6. Copiar spacer.gif
  if [ -f "$img_src/spacer.gif" ]; then
    cp "$img_src/spacer.gif" "$dest/images/spacer.gif"
  fi

  # 7. Renomear imagens e atualizar HTML simultaneamente
  #    Copia o HTML para destino primeiro, depois faz sed in-place
  cp "$html_file" "$dest/index.html"

  # 7a. Decodificar HTML entities no src das imagens antes de substituir
  #     &#x23; → #   &#x5b; → [   &#x5d; → ]
  sed -i '' 's/&#x23;/#/g; s/&#x5b;/[/g; s/&#x5d;/]/g' "$dest/index.html"

  for img in "$img_src"/*; do
    local bname
    bname="$(basename "$img")"

    # Pular spacer, metadata macOS
    [[ "$bname" == "spacer.gif" ]] && continue
    [[ "$bname" == ._* ]] && continue

    local ext="${bname##*.}"
    local new_name=""

    # Extrair número do slice: ..._NN.ext ou ..._NN-NN.ext
    if [[ "$bname" =~ _([0-9]+-[0-9]+)\.[a-zA-Z]+$ ]]; then
      # Caso especial: _16-17.ext (range de slices)
      new_name="${BASH_REMATCH[1]}.${ext}"
    elif [[ "$bname" =~ _([0-9]+)\.[a-zA-Z]+$ ]]; then
      new_name="${BASH_REMATCH[1]}.${ext}"
    else
      continue
    fi

    cp "$img" "$dest/images/$new_name"

    # Escapar caracteres especiais do nome para sed: [ ] # .
    local bname_escaped
    bname_escaped="$(echo "$bname" | sed 's/[][#.]/\\&/g')"

    # Substituir no HTML: images/nome_antigo → URL absoluta com nome novo
    sed -i '' "s|images/${bname_escaped}|${CDN_BASE}/${folder_name}/images/${new_name}|g" "$dest/index.html"
  done

  # 8. Substituir spacer.gif
  sed -i '' "s|images/spacer.gif|${CDN_BASE}/${folder_name}/images/spacer.gif|g" "$dest/index.html"

  # 9. bgcolor → #000000
  sed -i '' -E 's/(body[^>]*) bgcolor="[^"]*"/\1 bgcolor="#000000"/' "$dest/index.html"

  # 10. align="center" na table
  if ! grep -q 'align="center"' "$dest/index.html"; then
    sed -i '' -E 's/(<table[^>]*cellspacing="0")/\1 align="center"/' "$dest/index.html"
  fi

  # 11. Injetar <style> após <body>
  if ! grep -q 'border-collapse' "$dest/index.html"; then
    sed -i '' -E 's/(<body[^>]*>)/\1\
	<style>table td {border-collapse: collapse !important;}<\/style>/' "$dest/index.html"
  fi

  # 12. Adicionar style inline + align="left" em cada <img> que não tem style=
  sed -i '' -E 's/<img ([^s])/\<img style="margin: 0; border: 0; padding: 0; display: block;" align="left" \1/g' "$dest/index.html"
  # Para <img src= (começa com s)
  sed -i '' -E 's/<img (src=)/<img style="margin: 0; border: 0; padding: 0; display: block;" align="left" \1/g' "$dest/index.html"

  local img_count
  img_count=$(ls "$dest/images/" | grep -cv spacer || true)
  info "  ✓ $folder_name criado com $img_count imagens"

  rm -rf "$tmp"
}

# ── Main ─────────────────────────────────────────────────────

main() {
  local source_dir="${1:-}"

  if [ -z "$source_dir" ]; then
    die "Uso: $0 <pasta-com-zips>"
  fi

  [ -d "$source_dir" ] || die "Pasta não encontrada: $source_dir"

  local zips=()
  while IFS= read -r -d '' f; do
    zips+=("$f")
  done < <(find "$source_dir" -maxdepth 1 -name '*.zip' -print0 | sort -z)

  [ ${#zips[@]} -gt 0 ] || die "Nenhum ZIP encontrado em: $source_dir"

  info "Encontrados ${#zips[@]} ZIPs para processar"
  info "Repositório: $REPO_DIR"
  info ""

  local current_id
  current_id="$(next_id)"

  for zip in "${zips[@]}"; do
    process_zip "$zip" "$current_id"
    current_id=$(( current_id + 1 ))
  done

  info ""
  info "Pronto! ${#zips[@]} emails processados (IDs $(( current_id - ${#zips[@]} )) a $(( current_id - 1 )))"
}

main "$@"
