#!/bin/bash
########################################
# Cron Context Library
# Provides environment identification and error context
# for all cron jobs
########################################

# Detect environment information
get_cron_context() {
    local PROJECT_ROOT="${1:-$(pwd)}"

    # Get basic info
    local HOSTNAME=$(hostname)
    local SERVER_NAME=$(basename "$PROJECT_ROOT")
    local APP_ENV=$(grep "^APP_ENV=" "$PROJECT_ROOT/.env" 2>/dev/null | cut -d'=' -f2 || echo "unknown")
    local BRANCH=$(cd "$PROJECT_ROOT" && git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "unknown")
    local COMMIT=$(cd "$PROJECT_ROOT" && git rev-parse --short HEAD 2>/dev/null || echo "unknown")
    local TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S %Z')

    # Build context header
    cat << EOF
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 CRON JOB EXECUTION CONTEXT
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  Timestamp:    $TIMESTAMP
  Hostname:     $HOSTNAME
  Server:       $SERVER_NAME
  Environment:  $APP_ENV
  Branch:       $BRANCH
  Commit:       $COMMIT
  Project Root: $PROJECT_ROOT
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

EOF
}

# Print error with context
cron_error() {
    local message="$1"
    local command="${2:-unknown}"

    echo ""
    echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
    echo " ❌ CRON ERROR"
    echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
    echo "  Command: $command"
    echo "  Error:   $message"
    echo "  Time:    $(date '+%Y-%m-%d %H:%M:%S %Z')"
    echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
    echo ""
}

# Print success with context
cron_success() {
    local message="$1"
    local command="${2:-unknown}"

    echo ""
    echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
    echo " ✅ CRON SUCCESS"
    echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
    echo "  Command: $command"
    echo "  Message: $message"
    echo "  Time:    $(date '+%Y-%m-%d %H:%M:%S %Z')"
    echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
    echo ""
}

# Wrap command execution with context
cron_exec() {
    local command="$@"
    local exit_code

    get_cron_context

    echo "Executing: $command"
    echo ""

    # Execute command and capture exit code
    eval "$command"
    exit_code=$?

    if [ $exit_code -eq 0 ]; then
        cron_success "Command completed successfully" "$command"
    else
        cron_error "Command failed with exit code $exit_code" "$command"
    fi

    return $exit_code
}

# Export functions for use in other scripts
export -f get_cron_context
export -f cron_error
export -f cron_success
export -f cron_exec
