#!/usr/bin/env bash
# =====================================================================
#  deploy.sh — stawia stronę ślubną W&R na ŚWIEŻYM serwerze (Ubuntu)
#  Uruchom:  sudo bash deploy.sh [/sciezka/do/weronikairafal.zip]
# =====================================================================
set -euo pipefail

### ============ USTAWIENIA — UZUPEŁNIJ PRZED URUCHOMIENIEM ============
DOMAIN="weronikairafal.pl"          # główna domena
USE_WWW="no"                        # "yes" jeśli www.DOMENA też wskazuje na VPS
ADMIN_PASSWORD="ZMIEN_MNIE"         # hasło do panelu /admin
HOME_SECRET="ZMIEN_MNIE"            # wspólny sekret z serwerem domowym (musi się zgadzać z receiver.py!)
HOME_URL="http://10.50.0.2:8021"    # adres serwera domowego przez WireGuard
CERTBOT_EMAIL=""                    # e-mail do Let's Encrypt; PUSTE = pomiń HTTPS (zrobisz ręcznie)
### ===================================================================

ZIP="${1:-$HOME/weronikairafal.zip}"
APP_USER="${SUDO_USER:-$(whoami)}"
APP_DIR="/opt/weronikairafal"

echo ">> Użytkownik aplikacji: $APP_USER"
if [ ! -f "$ZIP" ]; then
  echo "!! Nie znaleziono paczki: $ZIP"
  echo "   Wgraj weronikairafal.zip na serwer i podaj ścieżkę, np.:"
  echo "   sudo bash deploy.sh ~/weronikairafal.zip"
  exit 1
fi
if [ "$ADMIN_PASSWORD" = "ZMIEN_MNIE" ] || [ "$HOME_SECRET" = "ZMIEN_MNIE" ]; then
  echo "!! Najpierw uzupełnij ADMIN_PASSWORD i HOME_SECRET w nagłówku skryptu."
  exit 1
fi

echo ">> Instaluję pakiety systemowe..."
export DEBIAN_FRONTEND=noninteractive
apt-get update -qq
apt-get install -y -qq python3-venv python3-pip unzip nginx sqlite3 certbot python3-certbot-nginx openssl

echo ">> Rozpakowuję do /opt..."
unzip -oq "$ZIP" -d /opt
mkdir -p "$APP_DIR/uploads/thumbs"
chown -R "$APP_USER:$APP_USER" "$APP_DIR"

echo ">> Tworzę venv i instaluję zależności (chwilę to potrwa)..."
sudo -u "$APP_USER" python3 -m venv "$APP_DIR/venv"
sudo -u "$APP_USER" "$APP_DIR/venv/bin/pip" install --upgrade pip -q
sudo -u "$APP_USER" "$APP_DIR/venv/bin/pip" install -q -r "$APP_DIR/requirements.txt"

SECRET_KEY="$(openssl rand -hex 32)"

echo ">> Zapisuję usługi systemd..."
cat > /etc/systemd/system/weronikairafal.service <<UNIT
[Unit]
Description=Weronika & Rafal - strona slubna (web/API)
After=network.target

[Service]
Type=simple
User=$APP_USER
Group=$APP_USER
WorkingDirectory=$APP_DIR
Environment="WR_SECRET_KEY=$SECRET_KEY"
Environment="WR_ADMIN_PASSWORD=$ADMIN_PASSWORD"
Environment="WR_BASE_URL=https://$DOMAIN"
Environment="WR_MODERATE=0"
Environment="WR_HOME_URL=$HOME_URL"
Environment="WR_HOME_SECRET=$HOME_SECRET"
ExecStart=$APP_DIR/venv/bin/gunicorn --workers 2 --bind 127.0.0.1:8011 app:app
Restart=on-failure
RestartSec=3

[Install]
WantedBy=multi-user.target
UNIT

cat > /etc/systemd/system/weronikairafal-forwarder.service <<UNIT
[Unit]
Description=Weronika & Rafal - forwarder zdjec na domowy serwer
After=network.target weronikairafal.service

[Service]
Type=simple
User=$APP_USER
Group=$APP_USER
WorkingDirectory=$APP_DIR
Environment="WR_HOME_URL=$HOME_URL"
Environment="WR_HOME_SECRET=$HOME_SECRET"
Environment="WR_KEEP_FULL_ON_VPS=0"
Environment="WR_FORWARD_INTERVAL=10"
ExecStart=$APP_DIR/venv/bin/python forwarder.py
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
UNIT

systemctl daemon-reload
systemctl enable --now weronikairafal weronikairafal-forwarder

echo ">> Konfiguracja nginx..."
SERVER_NAMES="$DOMAIN"
[ "$USE_WWW" = "yes" ] && SERVER_NAMES="$DOMAIN www.$DOMAIN"
cat > /etc/nginx/conf.d/weronikairafal.conf <<NGINX
server {
    listen 80;
    listen [::]:80;
    server_name $SERVER_NAMES;
    client_max_body_size 30M;
    location / {
        proxy_pass http://127.0.0.1:8011;
        proxy_set_header Host \$host;
        proxy_set_header X-Real-IP \$remote_addr;
        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto \$scheme;
        proxy_read_timeout 180s;
        proxy_send_timeout 180s;
    }
}
NGINX

nginx -t
systemctl enable nginx
systemctl restart nginx

echo ">> Sprawdzam aplikację lokalnie..."
sleep 2
curl -s -o /dev/null -w "   app 8011: %{http_code}\n" http://127.0.0.1:8011/ || true

if [ -n "$CERTBOT_EMAIL" ]; then
  echo ">> Wystawiam certyfikat HTTPS..."
  CB="-d $DOMAIN"
  [ "$USE_WWW" = "yes" ] && CB="$CB -d www.$DOMAIN"
  certbot --nginx $CB --non-interactive --agree-tos -m "$CERTBOT_EMAIL" --redirect \
    || echo "!! certbot nie powiódł się — uruchom ręcznie: sudo certbot --nginx -d $DOMAIN"
else
  echo ">> Pomijam HTTPS (pusty CERTBOT_EMAIL). Uruchom później: sudo certbot --nginx -d $DOMAIN"
fi

echo
echo "======================================================"
echo " GOTOWE."
echo " Strona:  http(s)://$DOMAIN"
echo " Panel:   /admin  (hasło = to, które ustawiłeś w ADMIN_PASSWORD)"
echo
echo " UWAGA: przesyłanie zdjęć na serwer domowy działa dopiero"
echo " po podniesieniu WireGuard do $HOME_URL."
echo " Do tego czasu zdjęcia gości ZOSTAJĄ na VPS (nic nie ginie)."
echo "======================================================"
