#!/bin/bash
# -*- coding: utf-8 -*-
# Test file for: check_dependancy_commands.sh

THIS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT_DIR="$(realpath "$THIS_DIR/../..")"

# Test counter
TESTS_RUN=0
TESTS_PASSED=0
TESTS_FAILED=0

# Colors
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m'

assert_success() {
    local cmd="$1"
    local desc="${2:-$cmd}"
    ((TESTS_RUN++))
    if eval "$cmd" > /dev/null 2>&1; then
        echo -e "${GREEN}✓${NC} $desc"
        ((TESTS_PASSED++))
    else
        echo -e "${RED}✗${NC} $desc"
        ((TESTS_FAILED++))
    fi
}

assert_file_exists() {
    local file="$1"
    ((TESTS_RUN++))
    if [ -f "$file" ]; then
        echo -e "${GREEN}✓${NC} File exists: $file"
        ((TESTS_PASSED++))
    else
        echo -e "${RED}✗${NC} File missing: $file"
        ((TESTS_FAILED++))
    fi
}

# Add your tests here
test_placeholder() {
    echo "TODO: Add tests for check_dependancy_commands.sh"
}

# Run tests
main() {
    echo "Testing: check_dependancy_commands.sh"
    echo "========================================"

    test_placeholder

    echo "========================================"
    echo "Results: $TESTS_PASSED/$TESTS_RUN passed"
    [ $TESTS_FAILED -gt 0 ] && exit 1
    exit 0
}

main "$@"

# --------------------------------------------------------------------------------
# Start of Source Code from: /home/ywatanabe/proj/scitex-writer/scripts/shell/modules/check_dependancy_commands.sh
# --------------------------------------------------------------------------------
# #!/bin/bash
# # -*- coding: utf-8 -*-
# # Timestamp: "2025-11-11 07:23:33 (ywatanabe)"
# # File: ./scripts/shell/modules/check_dependancy_commands.sh
# 
# ORIG_DIR="$(pwd)"
# THIS_DIR="$(cd $(dirname ${BASH_SOURCE[0]}) && pwd)"
# LOG_PATH="$THIS_DIR/.$(basename $0).log"
# echo > "$LOG_PATH"
# 
# GIT_ROOT="$(git rev-parse --show-toplevel 2>/dev/null)"
# 
# GRAY='\033[0;90m'
# GREEN='\033[0;32m'
# YELLOW='\033[0;33m'
# RED='\033[0;31m'
# NC='\033[0m' # No Color
# 
# echo_info() { echo -e "${GRAY}INFO: $1${NC}"; }
# log_info() {
#     if [ "${SCITEX_LOG_LEVEL:-1}" -ge 2 ]; then
#         echo -e "  \033[0;90m→ $1\033[0m"
#     fi
# }
# echo_success() { echo -e "${GREEN}SUCC: $1${NC}"; }
# echo_warning() { echo -e "${YELLOW}WARN: $1${NC}"; }
# echo_error() { echo -e "${RED}ERRO: $1${NC}"; }
# echo_header() { echo_info "=== $1 ==="; }
# # ---------------------------------------
# 
# # Don't clear log at start - timing info will be appended
# 
# # Configurations
# source ./config/load_config.sh $SCITEX_WRITER_DOC_TYPE
# 
# # Source the 00_shared LaTeX commands module
# source "$(dirname ${BASH_SOURCE[0]})/command_switching.src"
# log_info "Running ${BASH_SOURCE[0]}..."
# 
# 
# # Detect package manager
# detect_package_manager() {
#     if command -v apt &> /dev/null; then
#         echo "apt"
#     elif command -v yum &> /dev/null; then
#         echo "yum"
#     else
#         echo "unknown"
#     fi
# }
# 
# # Check if sudo is available
# has_sudo() {
#     if command -v sudo &> /dev/null; then
#         return 0
#     else
#         return 1
#     fi
# }
# 
# PKG_MANAGER=$(detect_package_manager)
# SUDO_PREFIX=""
# if has_sudo; then
#     SUDO_PREFIX="sudo "
# fi
# 
# # Standalone checker for each tool
# check_pdflatex() {
#     local cmd=$(get_cmd_pdflatex "$ORIG_DIR")
#     if [ -z "$cmd" ]; then
#         echo "- pdflatex"
#         if [ "$PKG_MANAGER" = "apt" ]; then
#             echo "    - ${SUDO_PREFIX}apt install texlive-latex-base"
#         elif [ "$PKG_MANAGER" = "yum" ]; then
#             echo "    - ${SUDO_PREFIX}yum install texlive-latex"
#         fi
#         echo "    - Or use: module load texlive"
#         echo "    - Or use: apptainer/singularity with texlive container"
#         return 1
#     fi
#     return 0
# }
# 
# check_bibtex() {
#     local cmd=$(get_cmd_bibtex "$ORIG_DIR")
#     if [ -z "$cmd" ]; then
#         echo "- bibtex"
#         if [ "$PKG_MANAGER" = "apt" ]; then
#             echo "    - ${SUDO_PREFIX}apt install texlive-bibtex-extra"
#         elif [ "$PKG_MANAGER" = "yum" ]; then
#             echo "    - ${SUDO_PREFIX}yum install texlive-bibtex"
#         fi
#         echo "    - Or use: module load texlive"
#         echo "    - Or use: apptainer/singularity with texlive container"
#         return 1
#     fi
#     return 0
# }
# 
# check_latexdiff() {
#     local cmd=$(get_cmd_latexdiff "$ORIG_DIR")
#     if [ -z "$cmd" ]; then
#         echo "- latexdiff"
#         if [ "$PKG_MANAGER" = "apt" ]; then
#             echo "    - ${SUDO_PREFIX}apt install latexdiff"
#         elif [ "$PKG_MANAGER" = "yum" ]; then
#             echo "    - ${SUDO_PREFIX}yum install texlive-latexdiff"
#         fi
#         echo "    - Or use: module load texlive"
#         echo "    - Or use: apptainer/singularity with texlive container"
#         return 1
#     fi
#     return 0
# }
# 
# check_texcount() {
#     local cmd=$(get_cmd_texcount "$ORIG_DIR")
#     if [ -z "$cmd" ]; then
#         echo "- texcount"
#         if [ "$PKG_MANAGER" = "apt" ]; then
#             echo "    - ${SUDO_PREFIX}apt install texlive-extra-utils"
#         elif [ "$PKG_MANAGER" = "yum" ]; then
#             echo "    - ${SUDO_PREFIX}yum install texlive-texcount"
#         fi
#         echo "    - Or use: module load texlive"
#         echo "    - Or use: apptainer/singularity with texlive container"
#         return 1
#     fi
#     return 0
# }
# 
# check_xlsx2csv() {
#     if ! command -v xlsx2csv &> /dev/null && ! python3 -c "import xlsx2csv" &> /dev/null 2>&1; then
#         echo "- xlsx2csv"
#         echo "    - pip install xlsx2csv"
#         if [ "$PKG_MANAGER" = "apt" ]; then
#             echo "    - Or: ${SUDO_PREFIX}apt install xlsx2csv"
#         fi
#         return 1
#     fi
#     return 0
# }
# 
# check_csv2latex() {
#     if ! command -v csv2latex &> /dev/null && ! python3 -c "import csv2latex" &> /dev/null 2>&1; then
#         echo "- csv2latex"
#         echo "    - pip install csv2latex"
#         return 1
#     fi
#     return 0
# }
# 
# check_parallel() {
#     if ! command -v parallel &> /dev/null; then
#         echo "- parallel"
#         if [ "$PKG_MANAGER" = "apt" ]; then
#             echo "    - ${SUDO_PREFIX}apt install parallel"
#         elif [ "$PKG_MANAGER" = "yum" ]; then
#             echo "    - ${SUDO_PREFIX}yum install parallel"
#         fi
#         return 1
#     fi
#     return 0
# }
# 
# check_opencv() {
#     if command -v python3 &> /dev/null; then
#         if ! python3 -c "import cv2" &> /dev/null 2>&1; then
#             echo "- opencv-python (optional, for --crop_tif)"
#             echo "    - pip install opencv-python"
#             return 1
#         fi
#     fi
#     return 0
# }
# 
# check_numpy() {
#     if command -v python3 &> /dev/null; then
#         if ! python3 -c "import numpy" &> /dev/null 2>&1; then
#             echo "- numpy (optional, for --crop_tif)"
#             echo "    - pip install numpy"
#             return 1
#         fi
#     fi
#     return 0
# }
# 
# check_mmdc() {
#     local cmd=$(get_cmd_mmdc "$ORIG_DIR")
#     if [ -z "$cmd" ]; then
#         echo "- mmdc (optional, for Mermaid diagrams)"
#         if ! command -v npm &> /dev/null; then
#             echo "    - First install npm/nodejs"
#         fi
#         echo "    - npm install -g @mermaid-js/mermaid-cli"
#         echo "    - Or use: apptainer/singularity with mermaid container"
#         return 1
#     fi
#     return 0
# }
# 
# check_bibtexparser() {
#     if command -v python3 &> /dev/null; then
#         if ! python3 -c "import bibtexparser" &> /dev/null 2>&1; then
#             echo "- bibtexparser (for bibliography analysis tools)"
#             echo "    - pip install bibtexparser"
#             return 1
#         fi
#     fi
#     return 0
# }
# 
# # Check all required commands (parallelized for speed)
# check_all_dependencies() {
#     local has_missing_required=false
#     local has_missing_optional=false
#     local required_output=""
#     local optional_output=""
# 
#     # Log run timestamp
#     echo "=== $(date '+%Y-%m-%d %H:%M:%S') ===" >> "$LOG_PATH"
# 
#     # Quick native-only check to avoid expensive container warmup
#     local all_native_available=true
#     local start_native_check=$(date +%s%N)
# 
#     # Check if all required native commands exist (fast check only)
#     if ! command -v pdflatex &> /dev/null || ! pdflatex --version &> /dev/null 2>&1; then
#         all_native_available=false
#     elif ! command -v bibtex &> /dev/null || ! bibtex --version &> /dev/null 2>&1; then
#         all_native_available=false
#     elif ! command -v latexdiff &> /dev/null; then
#         all_native_available=false
#     elif ! command -v texcount &> /dev/null || ! texcount --version &> /dev/null 2>&1; then
#         all_native_available=false
#     fi
# 
#     local end_native_check=$(date +%s%N)
#     local native_check_ms=$(( (end_native_check - start_native_check) / 1000000 ))
#     echo "Native check: ${native_check_ms}ms" >> "$LOG_PATH"
#     echo_info "    Native check: ${native_check_ms}ms"
# 
#     # Only do expensive warmup if native commands are missing
#     if [ "$all_native_available" = false ]; then
#         echo_info "    Native commands incomplete, checking alternatives..."
#         # Pre-warmup: do expensive shared setup once before parallelizing
#         # This prevents each parallel job from doing redundant work
#         local start_warmup=$(date +%s%N)
#         get_container_runtime &> /dev/null
#         load_texlive_module &> /dev/null
#         setup_latex_container &> /dev/null
#         setup_mermaid_container &> /dev/null
#         local end_warmup=$(date +%s%N)
#         local warmup_ms=$(( (end_warmup - start_warmup) / 1000000 ))
#         echo "Warmup: ${warmup_ms}ms" >> "$LOG_PATH"
#         echo_info "    Warmup: ${warmup_ms}ms"
#     else
#         echo_info "    All native LaTeX commands available (skipping container warmup)"
#     fi
# 
#     # Temp directory for parallel results
#     local temp_dir=$(mktemp -d)
# 
#     # Run all required checks in parallel, capturing exit codes
#     local start_checks=$(date +%s%N)
#     (check_pdflatex > "$temp_dir/req_pdflatex" 2>&1; echo $? > "$temp_dir/req_pdflatex.exit") &
#     (check_bibtex > "$temp_dir/req_bibtex" 2>&1; echo $? > "$temp_dir/req_bibtex.exit") &
#     (check_latexdiff > "$temp_dir/req_latexdiff" 2>&1; echo $? > "$temp_dir/req_latexdiff.exit") &
#     (check_texcount > "$temp_dir/req_texcount" 2>&1; echo $? > "$temp_dir/req_texcount.exit") &
#     (check_xlsx2csv > "$temp_dir/req_xlsx2csv" 2>&1; echo $? > "$temp_dir/req_xlsx2csv.exit") &
#     (check_csv2latex > "$temp_dir/req_csv2latex" 2>&1; echo $? > "$temp_dir/req_csv2latex.exit") &
#     (check_parallel > "$temp_dir/req_parallel" 2>&1; echo $? > "$temp_dir/req_parallel.exit") &
# 
#     # Run all optional checks in parallel
#     (check_opencv > "$temp_dir/opt_opencv" 2>&1; echo $? > "$temp_dir/opt_opencv.exit") &
#     (check_numpy > "$temp_dir/opt_numpy" 2>&1; echo $? > "$temp_dir/opt_numpy.exit") &
#     (check_mmdc > "$temp_dir/opt_mmdc" 2>&1; echo $? > "$temp_dir/opt_mmdc.exit") &
#     (check_bibtexparser > "$temp_dir/opt_bibtexparser" 2>&1; echo $? > "$temp_dir/opt_bibtexparser.exit") &
# 
#     # Wait for all background jobs
#     wait
#     local end_checks=$(date +%s%N)
#     local checks_ms=$(( (end_checks - start_checks) / 1000000 ))
#     echo "Parallel checks: ${checks_ms}ms" >> "$LOG_PATH"
#     echo_info "    Parallel checks: ${checks_ms}ms"
# 
#     # Collect required results with exit codes
#     declare -A tool_status
#     for tool in pdflatex bibtex latexdiff texcount xlsx2csv csv2latex parallel; do
#         local exit_code=$(cat "$temp_dir/req_${tool}.exit" 2>/dev/null || echo 1)
#         if [ "$exit_code" -eq 0 ]; then
#             tool_status[$tool]="✓"
#         else
#             has_missing_required=true
#             tool_status[$tool]="✗"
#             if [ -s "$temp_dir/req_${tool}" ]; then
#                 required_output="${required_output}$(cat "$temp_dir/req_${tool}")\n"
#             fi
#         fi
#     done
# 
#     # Collect optional results
#     for result_file in "$temp_dir"/opt_*.exit; do
#         local tool=$(basename "$result_file" .exit | sed 's/opt_//')
#         local exit_code=$(cat "$result_file" 2>/dev/null || echo 1)
#         if [ "$exit_code" -ne 0 ]; then
#             has_missing_optional=true
#             if [ -s "${result_file%.exit}" ]; then
#                 optional_output="${optional_output}$(cat "${result_file%.exit}")\n"
#             fi
#         fi
#     done
# 
#     # Cleanup
#     rm -rf "$temp_dir"
# 
#     # Display results
#     if [ "$has_missing_required" = true ]; then
#         echo_error "    Missing required tools:"
#         echo -e "$required_output"
#         return 1
#     else
#         # Show summary table using cached results (no additional checks!)
#         echo_success "    Required tools:"
#         printf "      %-20s %s\n" "pdflatex" "${tool_status[pdflatex]}"
#         printf "      %-20s %s\n" "bibtex" "${tool_status[bibtex]}"
#         printf "      %-20s %s\n" "latexdiff" "${tool_status[latexdiff]}"
#         printf "      %-20s %s\n" "texcount" "${tool_status[texcount]}"
#         printf "      %-20s %s\n" "xlsx2csv" "${tool_status[xlsx2csv]}"
#         printf "      %-20s %s\n" "csv2latex" "${tool_status[csv2latex]}"
#         printf "      %-20s %s\n" "parallel" "${tool_status[parallel]}"
#     fi
# 
#     if [ "$has_missing_optional" = true ]; then
#         echo_warning "    Missing optional tools:"
#         echo -e "$optional_output"
#     fi
# 
#     return 0
# }
# 
# # Run checks
# check_all_dependencies
# exit_code=$?
# 
# exit $exit_code
# 
# # EOF
# --------------------------------------------------------------------------------
# End of Source Code from: /home/ywatanabe/proj/scitex-writer/scripts/shell/modules/check_dependancy_commands.sh
# --------------------------------------------------------------------------------
