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

ROOT="${BEBIDAS_ON_ROOT:-/var/www/html/BEBIDAS_ON}"
PATCH_DIR="$(cd "$(dirname "$0")" && pwd)"
DATE_TAG="$(date +%Y%m%d_%H%M%S)"
BACKUP_DIR="/root/BEBIDAS_ON_backup_notificacoes_${DATE_TAG}"

if [[ ! -d "$ROOT" ]]; then
  echo "ERRO: pasta não encontrada: $ROOT"
  exit 1
fi

if [[ ! -f "$ROOT/.env" ]]; then
  echo "ERRO: arquivo $ROOT/.env não encontrado."
  exit 1
fi

if [[ ! -f "$ROOT/app/bootstrap.php" ]]; then
  echo "ERRO: o projeto Bebidas ON não foi encontrado em $ROOT."
  exit 1
fi

echo "1/8 - Criando backup em $BACKUP_DIR"
mkdir -p "$BACKUP_DIR"
for path in \
  app/bootstrap.php \
  app/fcm.php \
  config/app.php \
  public/gestao/pedidos.php \
  public/gestao/notificacoes.php \
  public/gestao/partials/header.php \
  public/api/v1/pedido_criar.php \
  public/api/v1/meus_pedidos.php \
  public/api/v1/pedido_detalhes.php \
  public/api/v1/cliente_fcm_token.php \
  public/api/v1/cliente_fcm_desativar.php \
  public/api/v1/notificacoes.php \
  public/api/v1/notificacao_lida.php \
  .htaccess; do
  if [[ -f "$ROOT/$path" ]]; then
    mkdir -p "$BACKUP_DIR/$(dirname "$path")"
    cp -a "$ROOT/$path" "$BACKUP_DIR/$path"
  fi
done

echo "2/8 - Copiando arquivos PHP e configurações"
mkdir -p \
  "$ROOT/app" \
  "$ROOT/config" \
  "$ROOT/database" \
  "$ROOT/public/api/v1" \
  "$ROOT/public/gestao/partials" \
  "$ROOT/storage"

cp -f "$PATCH_DIR/app/fcm.php" "$ROOT/app/fcm.php"
cp -f "$PATCH_DIR/app/bootstrap.php" "$ROOT/app/bootstrap.php"
cp -f "$PATCH_DIR/config/app.php" "$ROOT/config/app.php"
cp -f "$PATCH_DIR/database/notificacoes_patch.sql" "$ROOT/database/notificacoes_patch.sql"
cp -f "$PATCH_DIR/database/aplicar_patch.php" "$ROOT/database/aplicar_patch.php"
cp -f "$PATCH_DIR/public/api/v1/"*.php "$ROOT/public/api/v1/"
cp -f "$PATCH_DIR/public/gestao/pedidos.php" "$ROOT/public/gestao/pedidos.php"
cp -f "$PATCH_DIR/public/gestao/notificacoes.php" "$ROOT/public/gestao/notificacoes.php"
cp -f "$PATCH_DIR/public/gestao/partials/header.php" "$ROOT/public/gestao/partials/header.php"
cp -f "$PATCH_DIR/.htaccess" "$ROOT/.htaccess"

echo "3/8 - Configurando o .env"
if ! grep -q '^FIREBASE_SERVICE_ACCOUNT=' "$ROOT/.env"; then
  printf '\nFIREBASE_SERVICE_ACCOUNT="/etc/smd-delivery/firebase-service-account.json"\n' >> "$ROOT/.env"
fi
if ! grep -q '^FIREBASE_PROJECT_ID=' "$ROOT/.env"; then
  printf 'FIREBASE_PROJECT_ID=""\n' >> "$ROOT/.env"
fi

echo "4/8 - Procurando a conta de serviço Firebase"
mkdir -p /etc/smd-delivery
chown root:www-data /etc/smd-delivery
chmod 750 /etc/smd-delivery

if [[ -f "$PATCH_DIR/storage/firebase-service-account.json" ]]; then
  cp -f "$PATCH_DIR/storage/firebase-service-account.json" /etc/smd-delivery/firebase-service-account.json
fi

if [[ -f /etc/smd-delivery/firebase-service-account.json ]]; then
  chown root:www-data /etc/smd-delivery/firebase-service-account.json
  chmod 640 /etc/smd-delivery/firebase-service-account.json
  echo "Conta de serviço encontrada em /etc/smd-delivery."
else
  echo "ATENÇÃO: depois copie seu JSON privado para:"
  echo "/etc/smd-delivery/firebase-service-account.json"
fi

chown root:www-data "$ROOT/storage"
chmod 770 "$ROOT/storage"

echo "5/8 - Validando extensões do PHP"
php -r 'if (!extension_loaded("curl")) { fwrite(STDERR, "ERRO: extensão php-curl ausente.\n"); exit(1); } echo "php-curl OK\n";'
php -r 'if (!extension_loaded("openssl")) { fwrite(STDERR, "ERRO: extensão OpenSSL ausente.\n"); exit(1); } echo "OpenSSL OK\n";'

echo "6/8 - Aplicando tabelas MySQL"
php "$ROOT/database/aplicar_patch.php"

echo "7/8 - Validando sintaxe PHP"
find "$ROOT/app" "$ROOT/config" "$ROOT/public/api/v1" "$ROOT/public/gestao" \
  -type f -name '*.php' -print0 | xargs -0 -n1 php -l >/tmp/bebidas_on_php_lint.txt
cat /tmp/bebidas_on_php_lint.txt

echo "8/8 - Permissões e Apache"
chown -R www-data:www-data "$ROOT/app" "$ROOT/config" "$ROOT/database" "$ROOT/public"
find "$ROOT/app" "$ROOT/config" "$ROOT/database" "$ROOT/public" -type d -exec chmod 775 {} \;
find "$ROOT/app" "$ROOT/config" "$ROOT/database" "$ROOT/public" -type f -exec chmod 664 {} \;
chown root:www-data "$ROOT/storage"
chmod 770 "$ROOT/storage"
if [[ -f /etc/smd-delivery/firebase-service-account.json ]]; then
  chown root:www-data /etc/smd-delivery/firebase-service-account.json
  chmod 640 /etc/smd-delivery/firebase-service-account.json
fi

if command -v systemctl >/dev/null 2>&1 && systemctl list-unit-files | grep -q '^apache2.service'; then
  systemctl reload apache2
fi

echo
echo "INSTALAÇÃO CONCLUÍDA"
echo "Gestão: http://51.91.156.22/BEBIDAS_ON/public/gestao/notificacoes.php"
echo "API token: http://51.91.156.22/BEBIDAS_ON/public/api/v1/cliente_fcm_token.php"
echo
echo "Backup: $BACKUP_DIR"
