#!/usr/bin/env bash
# Resolve workspace layout: .run/run.config.json (config) or run/ (legacy).
# Sets WORKSPACE_DIR, RUN_DIR, PACKAGE_DIR, RUN_LAYOUT, ENV_FILE, WORKSPACE_CONFIG.

resolve_workspace() {
  local start="${1:-${PWD}}"
  local dir="" parent=""
  local legacy_cfg=""

  WORKSPACE_DIR=""
  if [ -n "${RUN_WORKSPACE_DIR:-}" ]; then
    WORKSPACE_DIR="$(cd "${RUN_WORKSPACE_DIR}" && pwd)"
  else
    dir="$(cd "${start}" 2>/dev/null && pwd || pwd)"
    while [ -n "${dir}" ]; do
      if [ -f "${dir}/.run/run.config.json" ] || [ -f "${dir}/run.config.json" ]; then
        WORKSPACE_DIR="${dir}"
        break
      fi
      if [ -f "${dir}/run/run.sh" ]; then
        WORKSPACE_DIR="${dir}"
        break
      fi
      if [ -f "${dir}/run.sh" ] && [ -d "${dir}/scripts" ]; then
        WORKSPACE_DIR="${dir}"
        break
      fi
      parent="$(dirname "${dir}")"
      [ "${parent}" = "${dir}" ] && break
      dir="${parent}"
    done
  fi

  [ -n "${WORKSPACE_DIR}" ] || return 1

  if [ -f "${WORKSPACE_DIR}/.run/run.config.json" ] || [ -f "${WORKSPACE_DIR}/run.config.json" ]; then
    RUN_LAYOUT=config
  elif [ -f "${WORKSPACE_DIR}/run/run.sh" ]; then
    RUN_LAYOUT=legacy
  elif [ -n "${RUN_WORKSPACE_DIR:-}" ]; then
    RUN_LAYOUT=config
  elif [ -f "${WORKSPACE_DIR}/run.sh" ] && [ -d "${WORKSPACE_DIR}/scripts" ]; then
    RUN_LAYOUT=checkout
  else
    return 1
  fi

  case "${RUN_LAYOUT}" in
    config)
      RUN_DIR="${WORKSPACE_DIR}/.run"
      PACKAGE_DIR="${RUN_PACKAGE_DIR:-}"
      if [ -z "${PACKAGE_DIR}" ] || [ ! -f "${PACKAGE_DIR}/run.sh" ]; then
        PACKAGE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
      fi
      ;;
    legacy)
      RUN_DIR="${WORKSPACE_DIR}/run"
      PACKAGE_DIR="${RUN_DIR}"
      ;;
    checkout)
      RUN_DIR="${WORKSPACE_DIR}"
      PACKAGE_DIR="${WORKSPACE_DIR}"
      ;;
  esac

  WORKSPACE_CONFIG="${RUN_DIR}/run.config.json"
  ENV_FILE="${RUN_DIR}/.env"
  mkdir -p "${RUN_DIR}"

  # Old layout kept run.config.json at the project root — move it under .run/.
  if [ "${RUN_LAYOUT}" = config ]; then
    legacy_cfg="${WORKSPACE_DIR}/run.config.json"
    if [ -f "${legacy_cfg}" ] && [ ! -f "${WORKSPACE_CONFIG}" ]; then
      mv "${legacy_cfg}" "${WORKSPACE_CONFIG}"
    fi
  fi

  export WORKSPACE_DIR RUN_DIR PACKAGE_DIR RUN_LAYOUT WORKSPACE_CONFIG ENV_FILE
}

ensure_workspace_gitignore() {
  [ "${RUN_LAYOUT}" = config ] || return 0
  local file="${WORKSPACE_DIR}/.gitignore" line=".run/"
  [ -f "${file}" ] || touch "${file}"
  grep -qxF "${line}" "${file}" 2>/dev/null || printf '\n%s\n' "${line}" >> "${file}"
}
