#!/bin/bash
# First-time Latch setup on Fedora/RHEL (after dnf install latch).
#
# Usage:
#   sudo latch-setup --url=https://forum.example.com --admin-user=admin --admin-email=admin@example.com
#
set -euo pipefail

LATCH_ROOT="/usr/share/latch/source"
LATCH_ETC="/etc/latch"
LATCH_LIB="/var/lib/latch"
WEB_USER="apache"

if [[ "$(id -u)" -ne 0 ]]; then
    echo "Run as root: sudo latch-setup ..." >&2
    exit 1
fi

OPTS=()
while [[ $# -gt 0 ]]; do
    case "$1" in
        --url=*) OPTS+=("$1") ;;
        --name=*) OPTS+=("$1") ;;
        --admin-user=*) OPTS+=("$1") ;;
        --admin-email=*) OPTS+=("$1") ;;
        --admin-pass=*) OPTS+=("$1") ;;
        -h|--help)
            sed -n '2,8p' "$0"
            exit 0
            ;;
        *)
            echo "Unknown option: $1" >&2
            exit 1
            ;;
    esac
    shift
done

mkdir -p "${LATCH_LIB}/storage"/{database,backups,logs,cache/twig}
chown -R "${WEB_USER}:${WEB_USER}" "${LATCH_LIB}/storage"
chmod 2770 "${LATCH_LIB}/storage"
chmod 2770 "${LATCH_LIB}/storage/database" "${LATCH_LIB}/storage/backups" "${LATCH_LIB}/storage/logs" "${LATCH_LIB}/storage/cache" 2>/dev/null || true

if [[ ! -L "${LATCH_ROOT}/storage" ]]; then
    if [[ -e "${LATCH_ROOT}/storage" && ! -L "${LATCH_ROOT}/storage" ]]; then
        rm -rf "${LATCH_ROOT}/storage"
    fi
    ln -sf "${LATCH_LIB}/storage" "${LATCH_ROOT}/storage"
fi

if [[ ! -e "${LATCH_ROOT}/config/local.php" ]]; then
    ln -sf "${LATCH_ETC}/local.php" "${LATCH_ROOT}/config/local.php"
fi

if [[ ! -f "${LATCH_ETC}/local.php" ]]; then
    KEY="$(php -r 'echo base64_encode(random_bytes(32));')"
    cat > "${LATCH_ETC}/local.php" <<PHP
<?php

declare(strict_types=1);

return [
    'site' => [
        'name' => 'Latch',
        'url' => 'http://localhost',
    ],
    'security' => [
        'encryption_key' => '${KEY}',
    ],
];
PHP
    chmod 0640 "${LATCH_ETC}/local.php"
    chown root:apache "${LATCH_ETC}/local.php" 2>/dev/null || chown root:"${WEB_USER}" "${LATCH_ETC}/local.php"
fi

echo "==> latch install"
sudo -u "${WEB_USER}" php "${LATCH_ROOT}/bin/latch" install "${OPTS[@]}"

echo "==> doctor"
sudo -u "${WEB_USER}" php "${LATCH_ROOT}/bin/latch" doctor || true

echo ""
echo "Setup complete."
echo "  Enable Apache: sudo systemctl enable --now httpd php-fpm"
echo "  Edit vhost:    /etc/httpd/conf.d/latch.conf"
echo "  Config:        /etc/latch/local.php"
echo ""
echo "Optional — guided local.php (Turnstile, mail, OIDC, plugin secrets):"
echo "  sudo latch configure"
echo "  sudo latch configure --show    # masked status"
echo "  See: /usr/share/latch/source/docs/CLOUDFLARE.md"