#!/usr/bin/env bash

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

_kahlo_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
}

_KAHLO_SCRIPT_PATH="$(_kahlo_script_path)"
KAHLO_ROOT="$(cd "$(dirname "${_KAHLO_SCRIPT_PATH}")" && pwd)"
unset -f _kahlo_script_path
unset _KAHLO_SCRIPT_PATH

_GREEN='\033[0;32m'
_YELLOW='\033[1;33m'
_BLUE='\033[0;34m'
_CYAN='\033[0;36m'
_NC='\033[0m'
_KAHLO_ENV_BASE="KAHLO"
_KAHLO_ENV_FILE="${KAHLO_ROOT}/environment.yaml"
_KAHLO_ENV_CREATED="0"

_kahlo_validate_deploy_name() {
    local deploy_name="$1"
    if [[ ! "$deploy_name" =~ ^[A-Za-z0-9-]{2,8}$ ]]; then
        echo -e "  ${_YELLOW}✗${_NC} deploy-name must match ^[A-Za-z0-9-]{2,8}$"
        return 1
    fi
}

_kahlo_install_repo_editable() {
    echo -e "  ${_CYAN}→${_NC} Installing repo package and dependencies from pyproject.toml..."
    if [[ -z "${CONDA_PREFIX:-}" ]]; then
        echo -e "  ${_YELLOW}✗${_NC} CONDA_PREFIX is not set after activation."
        return 1
    fi
    if ! "${CONDA_PREFIX}/bin/python" -m pip install -e "${KAHLO_ROOT}"; then
        echo -e "  ${_YELLOW}✗${_NC} Failed to install repo package from ${KAHLO_ROOT}"
        return 1
    fi
    echo -e "  ${_GREEN}✓${_NC} Installed repo package from ${KAHLO_ROOT}"
}

if [[ "$#" -ne 1 ]]; then
    echo -e "  ${_YELLOW}✗${_NC} Kahlo activation requires exactly one positional deploy-name."
    echo "Usage: source ./activate <deploy-name>"
    return 1
fi

_kahlo_deploy_name="$1"
if ! _kahlo_validate_deploy_name "${_kahlo_deploy_name}"; then
    return 1
fi

_KAHLO_ENV_NAME="${_KAHLO_ENV_BASE}-${_kahlo_deploy_name}"

echo -e "${_BLUE}Activating Kahlo environment...${_NC}"

if ! command -v conda >/dev/null 2>&1; then
    echo -e "  ${_YELLOW}✗${_NC} conda is required to activate Kahlo."
    return 1
fi

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

if ! conda info --envs | grep -Eq "(^|[[:space:]])${_KAHLO_ENV_NAME}([[:space:]]|$)"; then
    echo -e "  ${_BLUE}→${_NC} Creating conda environment ${_KAHLO_ENV_NAME}..."
    conda env create -n "${_KAHLO_ENV_NAME}" -f "${_KAHLO_ENV_FILE}" || return 1
    _KAHLO_ENV_CREATED="1"
fi

conda activate "${_KAHLO_ENV_NAME}" || return 1
echo -e "  ${_GREEN}✓${_NC} Activated ${_KAHLO_ENV_NAME}"

if [[ "${_KAHLO_ENV_CREATED}" == "1" ]]; then
    if ! _kahlo_install_repo_editable; then
        return 1
    fi
else
    echo -e "  ${_GREEN}✓${_NC} Reusing existing ${_KAHLO_ENV_NAME}; skipping pip install -e ."
fi

echo -e "  ${_GREEN}✓${_NC} Kahlo ready for deploy ${_kahlo_deploy_name}"

unset _kahlo_deploy_name
unset _KAHLO_ENV_CREATED
unset _KAHLO_ENV_NAME
