#!/usr/bin/env bash
# Ursa Environment Activation Script
# ==========================================
# This script must be SOURCED, not executed:
#   source ./activate <deploy-name>
#
# Contract:
#   1. create the URSA conda environment if it does not exist
#   2. activate the conda environment
#   3. on the first create only, install this repo editable exactly once
#   4. do nothing else

set -euo pipefail

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
BOLD='\033[1m'
NC='\033[0m'

CONDA_ENV_BASE="URSA"

validate_deploy_name() {
    deploy_name="$1"
    if ! [[ "$deploy_name" =~ ^[A-Za-z0-9-]{2,8}$ ]]; then
        printf "${RED}✗${NC} %s\n" "deploy-name must match ^[A-Za-z0-9-]{2,8}$"
        return 1
    fi
}

log_info() {
    printf "${CYAN}→${NC} %s\n" "$1"
}

log_success() {
    printf "${GREEN}✓${NC} %s\n" "$1"
}

fail_activate() {
    printf "${RED}✗${NC} %s\n" "$1"
    return 1
}

if [ "$#" -ne 1 ]; then
    printf "Error: Ursa activation requires exactly one positional deploy-name.\n"
    printf "Usage: source ./activate <deploy-name>\n"
    return 1 2>/dev/null || exit 1
fi

CONDA_ENV_DEPLOYMENT_CODE="$1"
if ! validate_deploy_name "${CONDA_ENV_DEPLOYMENT_CODE}"; then
    return 1 2>/dev/null || exit 1
fi

if [ -n "${BASH_VERSION:-}" ] && [ "${BASH_SOURCE[0]}" = "$0" ]; then
    printf "Error: This script must be sourced, not executed.\n"
    printf "Usage: source ./activate <deploy-name>\n"
    exit 1
fi

_ursa_script_path() {
    if [ -n "${ZSH_VERSION:-}" ]; then
        printf '%s\n' "${(%):-%x}"
    elif [ -n "${BASH_SOURCE[0]:-}" ]; then
        printf '%s\n' "${BASH_SOURCE[0]}"
    else
        printf '%s\n' "$0"
    fi
}

_URSA_SCRIPT_PATH="$(_ursa_script_path)"
SCRIPT_DIR="$(cd "$(dirname "${_URSA_SCRIPT_PATH}")" 2>/dev/null && pwd)"
unset _URSA_SCRIPT_PATH

ENV_FILE="${SCRIPT_DIR}/environment.yaml"
CONDA_ENV_NAME="${CONDA_ENV_BASE}-${CONDA_ENV_DEPLOYMENT_CODE}"
env_created=0

if ! command -v conda >/dev/null 2>&1; then
    fail_activate "Conda is required for Ursa activation"
    return 1
fi

if [ ! -f "$ENV_FILE" ]; then
    fail_activate "Environment file not found: $ENV_FILE"
    return 1
fi

if [ -n "${ZSH_VERSION:-}" ]; then
    eval "$(conda shell.zsh hook 2>/dev/null)" 2>/dev/null || true
elif [ -n "${BASH_VERSION:-}" ]; then
    eval "$(conda shell.bash hook 2>/dev/null)" 2>/dev/null || true
else
    CONDA_BASE="$(conda info --base 2>/dev/null)"
    if [ -f "${CONDA_BASE}/etc/profile.d/conda.sh" ]; then
        . "${CONDA_BASE}/etc/profile.d/conda.sh"
    fi
    unset CONDA_BASE
fi

if conda info --envs | grep -q "^${CONDA_ENV_NAME}[[:space:]]"; then
    log_success "Environment '${CONDA_ENV_NAME}' already exists"
else
    log_info "Environment '${CONDA_ENV_NAME}' not found. Building from ${ENV_FILE}..."
    log_info "This may take a few minutes..."
    if ! (cd "${SCRIPT_DIR}" && conda env create -n "$CONDA_ENV_NAME" -f "$ENV_FILE"); then
        fail_activate "Failed to create conda environment '${CONDA_ENV_NAME}'"
        return 1
    fi
    env_created=1
    log_success "Environment '${CONDA_ENV_NAME}' created successfully"
fi

log_info "Activating environment '${CONDA_ENV_NAME}'..."
if ! conda activate "$CONDA_ENV_NAME"; then
    fail_activate "Failed to activate conda environment '${CONDA_ENV_NAME}'"
    return 1
fi
if [ -n "${CONDA_PREFIX:-}" ] && [ -d "${CONDA_PREFIX}/bin" ]; then
    export PATH="${CONDA_PREFIX}/bin:${PATH:-}"
    hash -r 2>/dev/null || true
fi
log_success "Activated conda environment: ${CONDA_ENV_NAME}"

if [ "${env_created}" -eq 1 ]; then
    log_info "Installing local Ursa checkout..."
    if [ -z "${CONDA_PREFIX:-}" ] || [ ! -x "${CONDA_PREFIX}/bin/python" ]; then
        fail_activate "Activated conda environment does not expose ${CONDA_PREFIX:-<unset>}/bin/python"
        return 1
    fi
    if ! "${CONDA_PREFIX}/bin/python" -m pip install -e "${SCRIPT_DIR}"; then
        fail_activate "Failed to install local Ursa checkout from ${SCRIPT_DIR}"
        return 1
    fi
    log_success "Installed local Ursa checkout: ${SCRIPT_DIR}"
fi

printf "\n${BOLD}${GREEN}╔══════════════════════════════════════════════════════════════╗${NC}\n"
printf "${BOLD}${GREEN}║  ✓ Ursa environment ready!                                   ║${NC}\n"
printf "${BOLD}${GREEN}╚══════════════════════════════════════════════════════════════╝${NC}\n\n"
printf "  ${CYAN}Conda Environment:${NC} %s\n" "${CONDA_ENV_NAME}"
printf "  ${CYAN}Project Root:${NC}     %s\n" "${SCRIPT_DIR}"
printf "\n"
