#!/bin/bash
# MailPanel One-Click Deploy
# curl -o install.sh http://101.132.226.150/install.sh && bash install.sh

set -e
export DEBIAN_FRONTEND=noninteractive
echo '$nrconf{restart} = "a";' > /etc/needrestart/conf.d/99-auto.conf 2>/dev/null || true

DIST_URL="http://101.132.226.150"
INSTALL_DIR="/opt/mailpanel"
DOMAIN="${1:-_}"
ADMIN_USER="${2:-admin}"
ADMIN_PASS="${3:-admin123}"

log() { echo -e "\033[0;32m[+] $1\033[0m"; }
err() { echo -e "\033[0;31m[!] $1\033[0m"; exit 1; }
[ "$(id -u)" = "0" ] || err "Run as root"

# === 1. System ===
log "Installing packages..."
apt-get update -qq
apt-get install -y -qq python3 python3-venv python3-pip nginx curl openssl

# === 2. Download ===
log "Downloading from $DIST_URL..."
rm -rf "$INSTALL_DIR"
mkdir -p "$INSTALL_DIR"
curl -fsS "$DIST_URL/mailpanel.tar.gz" -o /tmp/mailpanel.tar.gz || err "Download failed: $DIST_URL/mailpanel.tar.gz"
tar xzf /tmp/mailpanel.tar.gz -C "$INSTALL_DIR" --strip-components=1 2>/dev/null || tar xzf /tmp/mailpanel.tar.gz -C "$INSTALL_DIR"
log "  OK"

# === 3. Python ===
log "Setting up Python..."
cd "$INSTALL_DIR"
python3 -m venv venv
source venv/bin/activate
pip install -q quart hypercorn requests paramiko asyncssh dnspython 2>/dev/null
log "  OK"

# === 4. Config ===
log "Configuring..."
SECRET_KEY=$(openssl rand -hex 32)
sed -i "s/secret_key = .*/secret_key = \"$SECRET_KEY\"/" app.py 2>/dev/null || true
sed -i "s/SECRET_KEY = .*/SECRET_KEY = \"$SECRET_KEY\"/" cards.py 2>/dev/null || true

mkdir -p /etc/nginx/ssl
[ -f /etc/nginx/ssl/mailpanel.crt ] || openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
    -keyout /etc/nginx/ssl/mailpanel.key -out /etc/nginx/ssl/mailpanel.crt -subj "/CN=${DOMAIN}" 2>/dev/null

[ -f "$INSTALL_DIR/nginx_mailpanel.conf" ] && cp "$INSTALL_DIR/nginx_mailpanel.conf" /etc/nginx/sites-available/mailpanel
ln -sf /etc/nginx/sites-available/mailpanel /etc/nginx/sites-enabled/mailpanel 2>/dev/null
rm -f /etc/nginx/sites-enabled/default
nginx -t && systemctl restart nginx
log "  OK"

# === 5. Service ===
log "Starting..."
cat > /etc/systemd/system/mailpanel.service << SVC
[Unit]
Description=Mail Panel
After=network.target
StartLimitIntervalSec=30
StartLimitBurst=5
[Service]
Type=simple
WorkingDirectory=$INSTALL_DIR
ExecStart=$INSTALL_DIR/venv/bin/hypercorn app:app -b 127.0.0.1:5000
Environment=PYTHONPATH=$INSTALL_DIR
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
SVC
systemctl daemon-reload
systemctl enable mailpanel
systemctl restart mailpanel
sleep 3

# === 6. Admin ===
source venv/bin/activate
python3 -c "
import sys; sys.path.insert(0,'$INSTALL_DIR')
from store import get_users, save_users
from cards import hash_password
users = get_users()
users['$ADMIN_USER'] = {'username':'$ADMIN_USER','password_hash':hash_password('$ADMIN_PASS'),'expires_at':'2099-12-31 23:59:59','card_code':'builtin'}
save_users(users)
"

IP=$(hostname -I | awk '{print $1}')
echo ""
echo "========================================="
echo "  MailPanel Ready"
echo "  URL:  https://$IP"
echo "  User: $ADMIN_USER / $ADMIN_PASS"
echo "========================================="
