#!/usr/bin/env bash
# CCS Error Codes
# Documentation: ../docs/errors/README.md

# Configuration Errors (E100-E199)
readonly E_CONFIG_MISSING="E101"
readonly E_CONFIG_INVALID_JSON="E102"
readonly E_CONFIG_INVALID_PROFILE="E103"

# Profile Management Errors (E200-E299)
readonly E_PROFILE_NOT_FOUND="E104"
readonly E_PROFILE_ALREADY_EXISTS="E105"
readonly E_PROFILE_CANNOT_DELETE_DEFAULT="E106"
readonly E_PROFILE_INVALID_NAME="E107"

# Claude CLI Detection Errors (E300-E399)
readonly E_CLAUDE_NOT_FOUND="E301"
readonly E_CLAUDE_VERSION_INCOMPATIBLE="E302"
readonly E_CLAUDE_EXECUTION_FAILED="E303"

# Network/API Errors (E400-E499)
readonly E_GLMT_PROXY_TIMEOUT="E401"
readonly E_API_KEY_MISSING="E402"
readonly E_API_AUTH_FAILED="E403"
readonly E_API_RATE_LIMIT="E404"

# File System Errors (E500-E599)
readonly E_FS_CANNOT_CREATE_DIR="E501"
readonly E_FS_CANNOT_WRITE_FILE="E502"
readonly E_FS_CANNOT_READ_FILE="E503"
readonly E_FS_INSTANCE_NOT_FOUND="E504"

# Internal Errors (E900-E999)
readonly E_INTERNAL_ERROR="E900"
readonly E_INVALID_STATE="E901"

# Get error documentation URL
get_error_doc_url() {
  local error_code="$1"
  echo "https://github.com/kaitranntt/ccs/blob/main/docs/errors/README.md#${error_code,,}"
}

# Get error category from code
get_error_category() {
  local error_code="$1"
  local code="${error_code#E}"

  if [[ $code -ge 100 && $code -lt 200 ]]; then
    echo "Configuration"
  elif [[ $code -ge 200 && $code -lt 300 ]]; then
    echo "Profile Management"
  elif [[ $code -ge 300 && $code -lt 400 ]]; then
    echo "Claude CLI Detection"
  elif [[ $code -ge 400 && $code -lt 500 ]]; then
    echo "Network/API"
  elif [[ $code -ge 500 && $code -lt 600 ]]; then
    echo "File System"
  elif [[ $code -ge 900 && $code -lt 1000 ]]; then
    echo "Internal"
  else
    echo "Unknown"
  fi
}
