#!/usr/bin/env bash
#
# tools/data-dirs.sh — cria os diretórios de dados do runtime SEM perder o guard do git.
#
# O `DATA_PATH` (default `./s3-local`) mora dentro do repositório e guarda o PGDATA e o bucket
# do RustFS. O conteúdo é dado de runtime (nunca versionado); o único arquivo versionado é o
# `s3-local/.gitignore` (`*` + `!.gitignore`), que mantém o diretório e ignora o resto.
#
# Quem recria o diretório precisa recriar o guard junto. `make destroy` move o diretório
# inteiro — guard incluído — para `.pi/trash/`; antes, a recriação só com `mkdir -p pgdata
# rustfs/data` deixava o arquivo versionado como deletado (` D s3-local/.gitignore`) e os dados
# sem ignore. Por isso o `podman-prepare`, o `scripts/update_prod.sh` e o `make destroy` passam por aqui.
#
# Uso: tools/data-dirs.sh <DATA_PATH> [<STORAGE_PATH>]
#   - cria <DATA_PATH>/{pgdata,rustfs/data} (+ <STORAGE_PATH>, se informado);
#   - dentro do repositório, cria `<DATA_PATH>/.gitignore` quando ele falta — nunca sobrescreve;
#   - fora do repositório só cria os diretórios (um `.gitignore` lá não teria efeito).
set -Eeuo pipefail

ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
DATA="${1:?uso: tools/data-dirs.sh <DATA_PATH> [<STORAGE_PATH>]}"
STORAGE="${2:-}"

mkdir -p "$DATA/pgdata" "$DATA/rustfs/data"
if [ -n "$STORAGE" ]; then
    mkdir -p "$STORAGE"
fi

# O `pgdata` é o diretório montado em `/var/lib/postgresql`; o cluster vive no subdiretório
# `pgdata/pgdata` (PGDATA). Depois do `gosu postgres`, o entrypoint da imagem roda
# `mkdir -p "$PGDATA"`, e para chegar no subdiretório o usuário postgres (uid 999) precisa de
# **x** no diretório montado. `mkdir` herda o umask do deploy (077 em vários hosts) → 0700
# do usuário do deploy, e o container entra em loop:
#   mkdir: cannot create directory '/var/lib/postgresql': Permission denied
# O modo explícito é o contrato (determinismo, ADR-001): o dado em si continua em 0700.
chmod 0755 "$DATA/pgdata"

# Guard do git: só quando o diretório de dados está DENTRO do repositório.
DATA_ABS="$(realpath -m -- "$DATA")"
case "${DATA_ABS%/}/" in
    "$ROOT"/*)
        if [ ! -e "$DATA_ABS/.gitignore" ]; then
            printf '*\n!.gitignore\n' > "$DATA_ABS/.gitignore"
        fi
        ;;
esac
