#!/bin/bash
# Grovely installer
# Requirements: Docker with Docker Compose v2 installed.

set -e

RELEASE="https://github.com/grovely-org/grovely-app/releases/latest/download"

echo ""
echo "  Welcome to Grovely"
echo "  ────────────────────────────────────────"
echo "  This will set up Grovely on your machine."
echo "  It downloads installation files from GitHub and container images from GitHub Container Registry."
echo "  Grovely checks public release metadata daily by default; this can be disabled later in .env."
echo ""
echo "  Grovely has two accounts:"
echo ""
echo "    Account 1 - The person whose cycle is being tracked."
echo "                Full access to the period tracker, pantry, and all settings."
echo ""
echo "    Account 2 - Their partner."
echo "                Full access to the pantry and shared features."
echo "                Can view the period tracker but cannot log or edit cycles."
echo ""
echo "  Please choose a username and password for each."
echo "  ────────────────────────────────────────"
echo ""

# Check Docker is available
if ! command -v docker &> /dev/null; then
  echo "  ❌ Docker is not installed."
  echo "     Install it from https://docs.docker.com/get-docker/ and run this script again."
  exit 1
fi

if ! docker compose version &> /dev/null; then
  echo "  ❌ Docker Compose v2 is not available."
  echo "     Make sure you have Docker Engine 24+ installed."
  exit 1
fi

echo "  Account 1 - The person whose cycle is tracked"
echo ""

read -p "  Username: " OWNER1_USERNAME
while [ -z "$OWNER1_USERNAME" ]; do
  echo "  Username cannot be empty."
  read -p "  Username: " OWNER1_USERNAME
done

read -s -p "  Password: " OWNER1_PASSWORD
echo ""
while [ -z "$OWNER1_PASSWORD" ]; do
  echo "  Password cannot be empty."
  read -s -p "  Password: " OWNER1_PASSWORD
  echo ""
done

echo ""
echo "  ────────────────────────────────────────"
echo ""
echo "  Account 2 - Their partner"
echo ""

read -p "  Username: " OWNER2_USERNAME
while [ -z "$OWNER2_USERNAME" ]; do
  echo "  Username cannot be empty."
  read -p "  Username: " OWNER2_USERNAME
done

read -s -p "  Password: " OWNER2_PASSWORD
echo ""
while [ -z "$OWNER2_PASSWORD" ]; do
  echo "  Password cannot be empty."
  read -s -p "  Password: " OWNER2_PASSWORD
  echo ""
done

echo ""
echo "  ────────────────────────────────────────"
echo ""
echo "  Timezone"
echo "  Grovely uses this to send notifications at the right time of day."
echo "  Examples: America/New_York, Europe/London, Asia/Tokyo, America/Santiago"
echo "  Full list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones"
echo "  Press Enter to use UTC."
echo ""
read -p "  Timezone: " TZ_INPUT
TZ_VALUE=${TZ_INPUT:-UTC}

echo ""
echo "  ────────────────────────────────────────"
echo "  Downloading Grovely..."
echo ""

mkdir -p grovely && cd grovely

curl -fsSL "$RELEASE/docker-compose.yml" -o docker-compose.yml
curl -fsSL "$RELEASE/docker-compose.proxy-host.yml" -o docker-compose.proxy-host.yml
curl -fsSL "$RELEASE/docker-compose.proxy-docker.yml" -o docker-compose.proxy-docker.yml
curl -fsSL "$RELEASE/example.env" -o example.env

umask 077
cat > .env <<EOF
OWNER1_USERNAME=${OWNER1_USERNAME}
OWNER1_PASSWORD=${OWNER1_PASSWORD}

OWNER2_USERNAME=${OWNER2_USERNAME}
OWNER2_PASSWORD=${OWNER2_PASSWORD}

TZ=${TZ_VALUE}
DISABLE_EMAIL=true
EOF

echo "  Starting Grovely..."
echo ""

docker compose pull
docker compose up -d

echo ""
echo "  ✅ Grovely is running!"
echo "  Home will show available Grovely releases. No household data is sent by the release check."
echo ""
echo "  Account 1 (period tracker):  log in as ${OWNER1_USERNAME}"
echo "  Account 2 (partner):         log in as ${OWNER2_USERNAME}"
echo ""
echo "  To stop Grovely:  docker compose down  (run from the grovely folder)"
echo "  To start again:   docker compose up -d  (run from the grovely folder)"
echo ""
read -p "  Open Grovely in your browser now? [y/N] " OPEN_BROWSER
if [[ "$OPEN_BROWSER" =~ ^[Yy]$ ]]; then
  if command -v xdg-open &> /dev/null; then
    xdg-open http://localhost:5173
  elif command -v open &> /dev/null; then
    open http://localhost:5173
  fi
fi
echo ""
