#!/bin/bash
set -e

echo "=========================================="
echo "  AegisOne Nginx Fix Script"
echo "=========================================="

NGINX_DIR="/opt/projects/nginx-proxy"

# 1. Остановить текущий nginx, если запущен
echo ""
echo "[1/7] Остановка текущего nginx..."
cd "$NGINX_DIR"
docker compose down 2>/dev/null || true

# 2. Сохранить старые конфиги
echo ""
echo "[2/7] Резервное копирование старых конфигов..."
BACKUP_DIR="/root/nginx-backup-$(date +%s)"
mkdir -p "$BACKUP_DIR"
if [ -f "$NGINX_DIR/nginx.conf" ]; then
    cp "$NGINX_DIR/nginx.conf" "$BACKUP_DIR/"
fi
if [ -d "$NGINX_DIR/conf.d" ]; then
    cp -r "$NGINX_DIR/conf.d" "$BACKUP_DIR/"
fi
echo "  ✅ Бэкап: $BACKUP_DIR"

# 3. Создать структуру директорий
echo ""
echo "[3/7] Создание структуры..."
mkdir -p "$NGINX_DIR/certs/live/aegisone.ru"
mkdir -p "$NGINX_DIR/conf.d"
mkdir -p "$NGINX_DIR/html"
mkdir -p "$NGINX_DIR/certs"

# 4. Сгенерировать самоподписанный сертификат (временный, пока Let's Encrypt не выдаст настоящий)
echo ""
echo "[4/7] Генерация временного самоподписанного сертификата..."
if [ ! -f "$NGINX_DIR/certs/live/aegisone.ru/fullchain.pem" ]; then
    openssl req -x509 -nodes -days 30 -newkey rsa:2048 \
        -keyout "$NGINX_DIR/certs/live/aegisone.ru/privkey.pem" \
        -out "$NGINX_DIR/certs/live/aegisone.ru/fullchain.pem" \
        -subj "/CN=aegisone.ru" \
        2>/dev/null || {
        echo "  ⚠️ OpenSSL не найден, генерируем через Docker..."
        docker run --rm -v "$NGINX_DIR/certs:/certs" alpine:latest sh -c "
            apk add openssl >/dev/null 2>&1
            mkdir -p /certs/live/aegisone.ru
            openssl req -x509 -nodes -days 30 -newkey rsa:2048 \
                -keyout /certs/live/aegisone.ru/privkey.pem \
                -out /certs/live/aegisone.ru/fullchain.pem \
                -subj '/CN=aegisone.ru'
        "
    }
    echo "  ✅ Самоподписанный сертификат создан"
else
    echo "  ℹ️ Сертификат уже существует"
fi

# 5. Копирование конфигов
echo ""
echo "[5/7] Установка новых конфигов..."
cp nginx.conf "$NGINX_DIR/nginx.conf"
cp -r conf.d/* "$NGINX_DIR/conf.d/"
echo "  ✅ Конфиги скопированы"

# 6. Создать html/index.html для webroot (нужен certbot)
echo ""
echo "[6/7] Подготовка webroot..."
mkdir -p "$NGINX_DIR/html/.well-known/acme-challenge"
cat > "$NGINX_DIR/html/index.html" << 'EOF'
<!DOCTYPE html>
<html>
<head><title>AegisOne</title></head>
<body><h1>AegisOne Engineering</h1></body>
</html>
EOF
echo "  ✅ Webroot готов"

# 7. Запуск nginx
echo ""
echo "[7/7] Запуск nginx..."
cd "$NGINX_DIR"
docker compose up -d
sleep 3

# Проверка
echo ""
echo "=========================================="
echo "  Проверка..."
echo "=========================================="

if docker compose exec nginx nginx -t 2>/dev/null; then
    echo "  ✅ nginx: конфиг валидный"
else
    echo "  ❌ nginx: ошибка в конфиге"
    docker compose logs --tail=20 nginx
    exit 1
fi

# Проверить отвечает ли nginx
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" http://localhost/ 2>/dev/null || echo "FAIL")
echo "  HTTP localhost: $HTTP_CODE"

echo ""
echo "=========================================="
echo "  Далее: получить Let's Encrypt сертификаты"
echo "=========================================="
echo ""
echo "Запустите:"
echo "  cd $NGINX_DIR"
echo "  docker compose run --rm certbot certonly --webroot \\"
echo "      --webroot-path=/var/www/certbot \\"
echo "      -d aegisone.ru -d www.aegisone.ru \\"
echo "      -d service.aegisone.ru \\"
echo "      -d git.aegisone.ru \\"
echo "      --email admin@aegisone.ru \\"
echo "      --agree-tos --non-interactive"
echo ""
echo "После получения сертификатов перезапустите nginx:"
echo "  docker compose exec nginx nginx -s reload"
echo ""
echo "Готово!"
