#!/bin/bash

# script/setup: Setup script used by DevContainers to prepare the project
#
# Installs optional development tools (pyright, GitHub Copilot CLI, git-cliff)
# and configures the environment. Called automatically by DevContainer postStartCommand.
#
# Usage:
#   ./scripts/setup/setup
#
# Examples:
#   ./scripts/setup/setup

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$SCRIPT_DIR/../.."

# shellcheck source=scripts/.lib/output.sh
source "$SCRIPT_DIR/../.lib/output.sh"

# Install optional pyright for type checking
if command -v npm >/dev/null 2>&1 && ! command -v pyright >/dev/null 2>&1; then
    log_header "Installing pyright for type checking"
    npm install -g pyright 2>/dev/null || {
        log_warning "pyright installation failed (optional)"
        log_info "You can install it manually: ${BOLD}npm install -g pyright${NC}"
    }
fi

# Install optional release note backend: GitHub Copilot CLI (AI-powered)
if command -v npm >/dev/null 2>&1 && ! command -v copilot >/dev/null 2>&1; then
    log_header "Installing GitHub Copilot CLI for AI-powered release notes"
    npm install -g @github/copilot 2>/dev/null || {
        log_warning "GitHub Copilot CLI installation failed (optional)"
        log_info "You can install it manually: ${BOLD}npm install -g @github/copilot${NC}"
    }
fi

# Install optional release note backend: git-cliff (template-based)
if command -v cargo >/dev/null 2>&1 && ! command -v git-cliff >/dev/null 2>&1; then
    log_header "Installing git-cliff for template-based release notes"
    cargo install git-cliff || {
        log_warning "git-cliff installation failed (optional)"
    }
fi

"$SCRIPT_DIR/bootstrap"

# Setup Debian compatibility symlinks for common CLI tool names.
mkdir -p "$HOME/.local/bin"

# Debian package fd-find provides `fdfind`, but most workflows expect `fd`.
if command -v fdfind >/dev/null 2>&1; then
    ln -sf "$(command -v fdfind)" "$HOME/.local/bin/fd"
fi

# Debian package bat provides `batcat`, but most workflows expect `bat`.
if command -v batcat >/dev/null 2>&1; then
    ln -sf "$(command -v batcat)" "$HOME/.local/bin/bat"
fi

# Ensure user-local bin directory is available in interactive shells.
if ! grep -q '\$HOME/.local/bin' "$HOME/.zshrc" 2>/dev/null; then
    printf '\n# Added by scripts/setup/setup\nexport PATH="$HOME/.local/bin:$PATH"\n' >> "$HOME/.zshrc"
fi

# Install HACS for testing with other custom components
echo ""
log_header "Installing HACS in dev environment"
log_info "This allows testing your integration alongside other HACS components"

# Ensure config directory is initialized by Home Assistant first
if [[ ! -f config/.HA_VERSION ]]; then
    log_step "Initializing Home Assistant config directory"
    hass --config "${PWD}/config" --script ensure_config >/dev/null 2>&1 || true
fi

# Create custom_components directory if it doesn't exist
mkdir -p config/custom_components

# Clean up existing HACS installation if present
if [[ -d config/custom_components/hacs ]]; then
    log_step "Removing existing HACS installation"
    rm -rf config/custom_components/hacs
fi
if [[ -L custom_components/hacs ]]; then
    log_step "Removing existing HACS symlink"
    rm -f custom_components/hacs
fi

# Download and extract HACS (stable release ZIP)
cd config/custom_components
log_step "Downloading HACS"
if wget -q https://github.com/hacs/integration/releases/latest/download/hacs.zip && \
   unzip -q hacs.zip -d hacs && \
   rm hacs.zip; then
    cd ../..

    # Install HACS Python dependencies
    log_step "Installing HACS Python dependencies"
    if uv pip install -q 'aiogithubapi>=22.10.1'; then
        # Create symlink so HA finds HACS alongside tibber_prices
        log_step "Creating symlink in custom_components/"
        ln -sf "${PWD}/config/custom_components/hacs" custom_components/hacs

        log_success "HACS installed successfully"
        log_info "Location: ${BOLD}config/custom_components/hacs/${NC}"
        log_info "Version: Stable release (no auto-updates)"
    else
        log_warning "Failed to install HACS Python dependencies"
        log_info "You can install manually: ${BOLD}uv pip install 'aiogithubapi>=22.10.1'${NC}"
    fi
else
    log_warning "HACS installation failed"
    log_info "You can install manually:"
    log_step "${BOLD}cd config/custom_components${NC}"
    log_step "${BOLD}wget https://github.com/hacs/integration/releases/latest/download/hacs.zip${NC}"
    log_step "${BOLD}unzip hacs.zip -d hacs && rm hacs.zip${NC}"
    cd ../..
fi

echo ""
log_success "Project setup complete"
