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

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"

# shellcheck source=scripts/release/lib/common.sh
source "$SCRIPT_DIR/release/lib/common.sh"
# shellcheck source=scripts/release/lib/validation.sh
source "$SCRIPT_DIR/release/lib/validation.sh"
# shellcheck source=scripts/release/lib/config_selection.sh
source "$SCRIPT_DIR/release/lib/config_selection.sh"

CLIENT="$(upper "${CLIENT:-}")"
ENV="$(upper "${ENV:-}")"
RELEASE_MODE="$(upper "${RELEASE_MODE:-}")"

[[ -n "$CLIENT" ]] || die "CLIENT non valorizzato"
[[ -n "$ENV" ]] || die "ENV non valorizzato (DEMO|SIT|UAT|PRD)"
[[ -n "$RELEASE_MODE" ]] || die "RELEASE_MODE non valorizzato (SSH|ZIP)"

validate_release_params "$CLIENT" "$ENV" "$RELEASE_MODE"

log "Preparing release for CLIENT=$CLIENT ENV=$ENV MODE=$RELEASE_MODE"

require_cmd rsync
require_cmd zip
require_cmd tar

cd "$ROOT_DIR"
rm -rf out/package out/allitude_package
mkdir -p out/package

RELEASE_ID="$(build_release_id)"

log "Release ID: $RELEASE_ID"

rsync -a ./ out/package/ --exclude out --exclude .git --exclude .claude

cd out/package

rm -rf .git .gitignore .gitattributes bitbucket-pipelines.yml README* || true
rm -f docs/release-pipeline.md || true

if [[ "$CLIENT" != "ALLITUDE" ]]; then
  config_path="$(resolve_config_file "$CLIENT" "$ENV")"
  cp "$ROOT_DIR/$config_path" com/conf/const.inc.php
  cleanup_conf_files com/conf
else
  # Per ALLITUDE servono 6 varianti nel pacchetto finale, ma il lint locale
  # richiede comunque un const.inc.php valido nella copia base.
  base_config_path="$(resolve_config_file "ALLITUDE" "$ENV" "HYPO")"
  cp "$ROOT_DIR/$base_config_path" com/conf/const.inc.php
  cleanup_conf_files com/conf
fi

echo "$RELEASE_ID" > version.txt

php -l index.php
php -l com/conf/init.inc.php
php -l com/conf/const.inc.php

cd "$ROOT_DIR"

if [[ "$RELEASE_MODE" == "SSH" ]]; then
  ARCHIVE_NAME="release_${CLIENT}_${ENV}_${RELEASE_ID}.tar.gz"
  tar -czf "out/$ARCHIVE_NAME" -C out/package .
elif [[ "$RELEASE_MODE" == "ZIP" ]]; then
  if [[ "$CLIENT" == "ALLITUDE" ]]; then
    ARCHIVE_NAME="release_${CLIENT}_${ENV}_${RELEASE_ID}.zip"
    bash "$SCRIPT_DIR/release/package_allitude_zip.sh" "$ENV" "out/package" "$ROOT_DIR/out/$ARCHIVE_NAME"
  else
    ARCHIVE_NAME="release_${CLIENT}_${ENV}_${RELEASE_ID}.zip"
    bash "$SCRIPT_DIR/release/package_standard_zip.sh" "out/package" "$ROOT_DIR/out/$ARCHIVE_NAME"
  fi
else
  die "RELEASE_MODE non supportato: $RELEASE_MODE"
fi

write_release_meta "out/release_meta.env"

log "Release package created: out/$ARCHIVE_NAME"
log "Metadata created: out/release_meta.env"
``