#!/usr/bin/env bash
# Chatwoot using YOUR PostgreSQL (same PC or LAN). Redis stays in Docker.
set -euo pipefail
cd "$(dirname "$0")/.."

if [[ ! -f .env ]]; then
  echo "Copy .env.example to .env and set POSTGRES_* first."
  exit 1
fi

# shellcheck disable=SC1091
source scripts/lib-compose.sh

if [[ "${POSTGRES_USE_HOST_NETWORK:-}" == "true" ]]; then
  echo "Using host network (PostgreSQL on 127.0.0.1 only)."
fi
if [[ -f chatwoot/docker/Dockerfile ]]; then
  echo "Using local source build (chatwoot/)."
fi

if [[ -z "${POSTGRES_HOST:-}" ]]; then
  echo "Set POSTGRES_HOST in .env (e.g. 127.0.0.1 or host.docker.internal)"
  exit 1
fi

if [[ -z "${CHATWOOT_SECRET_KEY_BASE:-}" || "${CHATWOOT_SECRET_KEY_BASE}" == change_me* ]]; then
  secret=$(openssl rand -hex 32)
  echo "CHATWOOT_SECRET_KEY_BASE=${secret}" >> .env
  export CHATWOOT_SECRET_KEY_BASE="$secret"
  echo "Appended CHATWOOT_SECRET_KEY_BASE to .env"
fi

echo "Starting Redis (required before Rails boots)..."
compose up -d redis

echo "Testing PostgreSQL ${POSTGRES_HOST}:${POSTGRES_PORT:-5432} / ${POSTGRES_DATABASE:-chatwoot} ..."
if command -v psql >/dev/null && [[ -n "${POSTGRES_PASSWORD:-}" ]]; then
  PGPASSWORD="${POSTGRES_PASSWORD}" psql -h "${POSTGRES_HOST}" -p "${POSTGRES_PORT:-5432}" \
    -U "${POSTGRES_USERNAME}" -d "${POSTGRES_DATABASE}" -c 'SELECT 1' >/dev/null \
    || {
      echo "Connection failed. If Postgres listens only on 127.0.0.1, set POSTGRES_USE_HOST_NETWORK=true"
      exit 1
    }
  echo "DB connection OK (psql)"
  if [[ -n "${POSTGRES_SCHEMA:-}" ]]; then
    PGPASSWORD="${POSTGRES_PASSWORD}" psql -h "${POSTGRES_HOST}" -p "${POSTGRES_PORT:-5432}" \
      -U "${POSTGRES_USERNAME}" -d "${POSTGRES_DATABASE}" -c \
      "CREATE SCHEMA IF NOT EXISTS ${POSTGRES_SCHEMA};" >/dev/null 2>&1 || true
  fi
  PGPASSWORD="${POSTGRES_PASSWORD}" psql -h "${POSTGRES_HOST}" -p "${POSTGRES_PORT:-5432}" \
    -U "${POSTGRES_USERNAME}" -d "${POSTGRES_DATABASE}" -c \
    'CREATE EXTENSION IF NOT EXISTS vector;' >/dev/null 2>&1 || {
    echo "pgvector missing. On this PC run:"
    echo "  sudo apt install postgresql-16-pgvector"
    echo "Then in pgAdmin on database ${POSTGRES_DATABASE}: CREATE EXTENSION vector;"
    exit 1
  }
  echo "pgvector OK"
else
  echo "Install psql client or set POSTGRES_PASSWORD to run connection checks."
fi

if [[ -n "${POSTGRES_SCHEMA:-}" ]]; then
  echo "Using PostgreSQL schema: ${POSTGRES_SCHEMA} (DATABASE_URL search_path)"
fi

echo "Preparing Chatwoot tables..."
compose run --rm --no-deps rails bundle exec rails db:chatwoot_prepare

echo "Starting app..."
compose up -d redis rails sidekiq

port="${CHATWOOT_HOST_PORT:-3000}"
url="${CHATWOOT_FRONTEND_URL:-http://localhost:${port}}"
echo ""
echo "Chatwoot (external DB) is up at ${url}"
echo "  ./scripts/create-admin.sh"
