#!/usr/bin/env bash

set -euo pipefail

project_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
release_directory="${1:-${project_root}/output}"
release_name="academycore-cpanel-$(date +%Y%m%d-%H%M%S).zip"
release_path="${release_directory}/${release_name}"

mkdir -p "${release_directory}"

cd "${project_root}"
zip -q -r "${release_path}" \
    app artisan bootstrap composer.json composer.lock config database \
    public resources routes storage vendor .env.example README.md INSTALACION-CPANEL.md \
    -x \
    '*/.DS_Store' '__MACOSX/*' '.env' \
    'database/database.sqlite' \
    'storage/app/installed.lock' \
    'storage/app/deltanet-license.json' \
    'storage/app/installer-state.enc' \
    'storage/app/public/brand/*' \
    'storage/framework/cache/data/*' \
    'storage/framework/sessions/*' \
    'storage/framework/testing/*' \
    'storage/framework/views/*' \
    'storage/logs/*' \
    'bootstrap/cache/*.php'

# ZIP does not reliably preserve empty directories. Keep Laravel's placeholder
# files so cPanel creates every runtime directory during extraction.
zip -q "${release_path}" \
    bootstrap/cache/.gitignore \
    storage/framework/cache/data/.gitignore \
    storage/framework/sessions/.gitignore \
    storage/framework/views/.gitignore \
    storage/logs/.gitignore

package_listing="$(mktemp)"
trap 'rm -f "${package_listing}"' EXIT
unzip -Z1 "${release_path}" > "${package_listing}"

for forbidden in '.env' 'database/database.sqlite' 'storage/app/installed.lock' 'storage/app/deltanet-license.json' 'storage/app/installer-state.enc'; do
    if grep -Fxq "${forbidden}" "${package_listing}"; then
        echo "El paquete contiene un archivo privado: ${forbidden}" >&2
        exit 1
    fi
done

for required in 'database/install/academycore-clean.sql' 'database/install/academycore-demo.sql' 'vendor/autoload.php' 'public/build/manifest.json'; do
    if ! grep -Fxq "${required}" "${package_listing}"; then
        echo "El paquete no contiene un archivo requerido: ${required}" >&2
        exit 1
    fi
done

if unzip -p "${release_path}" database/install/academycore-clean.sql | grep -Eq 'instructor@deltanet\.test|estudiante@deltanet\.test'; then
    echo 'El SQL limpio contiene usuarios de demostración.' >&2
    exit 1
fi

echo "${release_path}"
