#!/bin/bash
#
# Realistic Vision V4 (onlyfake) 一键离线安装脚本
# 使用方法: bash install.sh [--port 7860] [--host 0.0.0.0] [--mem 6g] [--name realistic-vision-v4]
#
set -euo pipefail

PORT=7860
HOST=0.0.0.0
MEM=6g
NAME=realistic-vision-v4
MODEL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/model"
IMAGE_TAR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/realistic-vision-v4-image.tar"

while [[ $# -gt 0 ]]; do
  case "$1" in
    --port)  PORT="$2";  shift 2 ;;
    --host)  HOST="$2";  shift 2 ;;
    --mem)   MEM="$2";   shift 2 ;;
    --name)  NAME="$2";  shift 2 ;;
    --model-dir) MODEL_DIR="$2"; shift 2 ;;
    --image-tar) IMAGE_TAR="$2"; shift 2 ;;
    -h|--help)
      echo "usage: bash $0 [--port 7860] [--host 0.0.0.0] [--mem 6g] [--name realistic-vision-v4]"
      echo "       --model-dir <path>  模型权重目录(默认 ./model)"
      echo "       --image-tar <path>  docker 镜像 tar(默认 ./realistic-vision-v4-image.tar)"
      exit 0 ;;
    *) echo "未知参数: $1"; exit 1 ;;
  esac
done

echo "==> [1/4] 检查环境"
if ! command -v docker >/dev/null 2>&1; then
  echo "错误: 未安装 docker。请先安装 docker 再运行本脚本。"
  exit 1
fi
if ! docker info >/dev/null 2>&1; then
  echo "错误: docker 守护进程未运行或无权限。请启动 docker (systemctl start docker) 并以有权限用户执行。"
  exit 1
fi

[[ -f "$IMAGE_TAR" ]] || { echo "错误: 找不到镜像文件 $IMAGE_TAR"; exit 1; }
[[ -d "$MODEL_DIR/hub" ]] || { echo "错误: 模型目录 $MODEL_DIR 无效(缺少 hub/ 子目录)"; exit 1; }

echo "==> [2/4] 导入 docker 镜像"
if docker image inspect "$NAME:latest" >/dev/null 2>&1; then
  echo "    镜像 $NAME:latest 已存在，跳过。"
else
  docker load -i "$IMAGE_TAR"
  docker tag realistic-vision-v4-realistic-vision:latest "$NAME:latest" 2>/dev/null || true
fi

echo "==> [3/4] 停旧容器"
docker rm -f "$NAME" >/dev/null 2>&1 || true

echo "==> [4/4] 启动容器"
docker run -d \
  --name "$NAME" \
  --restart unless-stopped \
  -p "$HOST:$PORT:7860" \
  -v "$MODEL_DIR:/data/hf_cache" \
  -e HF_HOME=/data/hf_cache \
  -e MODEL_REPO=SG161222/Realistic_Vision_V4.0_noVAE \
  -e MODEL_FILE=Realistic_Vision_V4.0.safetensors \
  -e MODEL_ID=Onlyfake/realistic-vision-v4 \
  --memory "$MEM" \
  --memory-swap "$(( ${MEM%g} * 2 ))g" \
  realistic-vision-v4-realistic-vision:latest

echo ""
echo "==> 安装完成"
echo "    服务名:   $NAME"
echo "    访问地址: http://$HOST:$PORT"
echo "    健康检查: http://$HOST:$PORT/health  (首次加载模型需几分钟, 状态从 loading 变为 ok)"
echo "    生成接口: POST http://$HOST:$PORT/generate  (JSON: {\"prompt\": \"...\"})"
echo ""
echo "    查看日志: docker logs -f $NAME"
