#!/bin/sh
set -e
ADDONS_DIR="${ADDONS_DIR:-/mnt/extra-addons}"
SCRIPTS_DIR="${SCRIPTS_DIR:-/mnt/work_scripts}"
ODOO_CONF="${ODOO_CONF:-/etc/odoo/odoo.conf}"
if [ -f /mnt/repo/config/odoo.prod.conf ]; then
  ODOO_CONF=/mnt/repo/config/odoo.prod.conf
fi
CONF=/tmp/odoo.runtime.conf
cat "$ODOO_CONF" > "$CONF"
if [ -n "$SODOO_ADMIN_PASSWORD" ]; then
  echo "admin_passwd = $SODOO_ADMIN_PASSWORD" >> "$CONF"
fi
if [ -n "$SODOO_DB_PASSWORD" ]; then
  echo "db_password = $SODOO_DB_PASSWORD" >> "$CONF"
fi
# Production mounts the full repo at /mnt/repo; point Odoo at deployed addons.
if [ -d /mnt/repo/addons ]; then
  echo "addons_path = /mnt/repo/addons,/usr/lib/python3/dist-packages/odoo/addons" >> "$CONF"
fi

database_exists() {
  python3 <<PY
import os
import psycopg2
conn = psycopg2.connect(
    host=os.environ.get('HOST', 'db'),
    port=os.environ.get('PORT', '5432'),
    user=os.environ.get('USER', 'odoo'),
    password=os.environ.get('SODOO_DB_PASSWORD', ''),
    dbname='postgres',
)
cur = conn.cursor()
cur.execute("SELECT 1 FROM pg_database WHERE datname = 'odoo'")
print('yes' if cur.fetchone() else 'no')
PY
}

fix_web_base_url() {
  if [ -z "$SODOO_WEB_BASE_URL" ]; then
    return
  fi
  python3 <<PY
import odoo
from odoo.tools import config
config.parse_config(['-c', '${CONF}', '-d', 'odoo', '--no-http'])
registry = odoo.registry('odoo')
with registry.cursor() as cr:
    env = odoo.api.Environment(cr, odoo.SUPERUSER_ID, {})
    env['ir.config_parameter'].sudo().set_param('web.base.url', '${SODOO_WEB_BASE_URL}')
    cr.commit()
print('web.base.url set to ${SODOO_WEB_BASE_URL}')
PY
}

BOOT_FLAG=/var/lib/odoo/.bootstrap_done
DUMP=$SCRIPTS_DIR/production_sync/odoo_full.zip
if [ ! -f "$BOOT_FLAG" ] && [ -f "$DUMP" ]; then
  if [ "$(database_exists)" = "yes" ]; then
    echo "Database odoo already exists — skipping bootstrap."
    touch "$BOOT_FLAG"
  else
    echo "Bootstrapping production database from $DUMP ..."
    odoo db -c "$CONF" load odoo "$DUMP" -f -n
    touch "$BOOT_FLAG"
    echo "Bootstrap complete."
  fi
fi

install_so_helpdesk_if_needed() {
  if [ "$(database_exists)" != "yes" ] || [ ! -d "$ADDONS_DIR/so_helpdesk" ]; then
    return
  fi
  NEEDS_INSTALL=$(python3 <<PY
import odoo
from odoo.tools import config
config.parse_config(['-c', '${CONF}', '-d', 'odoo', '--no-http'])
registry = odoo.registry('odoo')
with registry.cursor() as cr:
    env = odoo.api.Environment(cr, odoo.SUPERUSER_ID, {})
    mod = env['ir.module.module'].search([('name', '=', 'so_helpdesk')], limit=1)
    print('no' if mod.state == 'installed' else 'yes')
PY
)
  if [ "$NEEDS_INSTALL" = "yes" ]; then
    echo "Installing so_helpdesk module ..."
    /bin/sh "$SCRIPTS_DIR/so_helpdesk/install_module.sh"
  else
    /bin/sh "$SCRIPTS_DIR/so_helpdesk/grant_access.sh" || echo "Warning: helpdesk access grant failed"
  fi
}

upgrade_my_company_if_needed() {
  if [ "$(database_exists)" != "yes" ] || [ ! -f "$SCRIPTS_DIR/my_company/upgrade_module.sh" ]; then
    return
  fi
  /bin/sh "$SCRIPTS_DIR/my_company/upgrade_module.sh" || echo "Warning: my_company upgrade failed"
}

install_jb_ai_assistant_if_needed() {
  if [ "$(database_exists)" != "yes" ] || [ ! -d "$ADDONS_DIR/jb_ai_assistant" ]; then
    return
  fi
  NEEDS_INSTALL=$(python3 <<PY
import odoo
from odoo.tools import config
config.parse_config(['-c', '${CONF}', '-d', 'odoo', '--no-http'])
registry = odoo.registry('odoo')
with registry.cursor() as cr:
    env = odoo.api.Environment(cr, odoo.SUPERUSER_ID, {})
    mod = env['ir.module.module'].search([('name', '=', 'jb_ai_assistant')], limit=1)
    print('no' if mod.state == 'installed' else 'yes')
PY
)
  if [ "$NEEDS_INSTALL" = "yes" ]; then
    echo "Installing jb_ai_assistant module ..."
    /bin/sh "$SCRIPTS_DIR/jb_ai_assistant/install_module.sh"
  fi
}

if [ "$(database_exists)" = "yes" ]; then
  fix_web_base_url || echo "Warning: could not update web.base.url"
  upgrade_my_company_if_needed
  install_so_helpdesk_if_needed || echo "Warning: so_helpdesk install failed"
  install_jb_ai_assistant_if_needed || echo "Warning: jb_ai_assistant install failed"
fi

exec odoo -c "$CONF"
