#!/bin/bash
#
# Script pentru fixare config.guess & config.sub pentru aarch64
# Limba: Română
#

# Culori
VERDE='\033[0;32m'
GALBEN='\033[1;33m'
ALBASTRU='\033[0;34m'
ROSU='\033[0;31m'
NC='\033[0m'

log_info() {
    echo -e "${ALBASTRU}[INFO]${NC} $1"
}

log_success() {
    echo -e "${VERDE}[SUCCES]${NC} $1"
}

log_error() {
    echo -e "${ROSU}[EROARE]${NC} $1"
}

log_warn() {
    echo -e "${GALBEN}[AVERTIZARE]${NC} $1"
}

echo -e "${ALBASTRU}"
echo "═══════════════════════════════════════"
echo "  Fix config.guess pentru aarch64"
echo "═══════════════════════════════════════"
echo -e "${NC}"

# Detectează platformă
MACHINE=$(uname -m)
SYSTEM=$(uname -s)

log_info "Sistem detectat: $SYSTEM $MACHINE"

# Verifică dacă config.guess există
if [ ! -f "config.guess" ]; then
    log_error "config.guess nu găsit în directorul curent!"
    exit 1
fi

# Backup original
cp config.guess config.guess.bak
cp config.sub config.sub.bak
log_success "Backup creat: config.guess.bak, config.sub.bak"

# Fixare pentru aarch64
if [ "$MACHINE" = "aarch64" ] || [ "$MACHINE" = "arm64" ]; then
    log_info "Detectat aarch64/arm64, aplicare fix..."

    # Metoda 1: Patch direct în config.guess pentru case aarch64
    if grep -q "case \"\$machine\" in" config.guess; then
        # Găsește linia și adaugă case pentru aarch64
        line_num=$(grep -n 'case "$machine" in' config.guess | head -1 | cut -d: -f1)
        if [ -n "$line_num" ]; then
            # Creează temp file cu patch
            head -n "$line_num" config.guess > config.guess.tmp

            # Adaugă case pentru aarch64
            cat >> config.guess.tmp << 'EOF'
	aarch64*|arm64*)
		echo aarch64-unknown-linux-gnu
		exit 0
		;;
EOF

            # Adaugă restul fișierului
            tail -n +$((line_num + 1)) config.guess >> config.guess.tmp

            mv config.guess.tmp config.guess
            chmod +x config.guess
            log_success "config.guess patched pentru aarch64"
        fi
    fi
fi

# Verifică config.sub pentru aarch64
if [ "$MACHINE" = "aarch64" ] || [ "$MACHINE" = "arm64" ]; then
    log_info "Verificare config.sub..."

    if ! grep -q "aarch64" config.sub; then
        log_warn "config.sub nu are suport aarch64, aplicare patch..."

        # Adaugă suport aarch64 în config.sub
        if grep -q "case \$cpu in" config.sub; then
            # Găsește linia și adaugă case pentru aarch64
            sed -i '/case $cpu in/a\
\t\taarch64 | arm64)\
\t\t\tcpu=aarch64\
\t\t\t;;' config.sub

            log_success "config.sub patched pentru aarch64"
        fi
    else
        log_success "config.sub are deja suport aarch64"
    fi
fi

# Test
log_info "Test config.guess..."
RESULT=$(./config.guess 2>&1)
if [ $? -eq 0 ]; then
    log_success "config.guess funcționează!"
    echo -e "${VERDE}Output: $RESULT${NC}"
else
    log_error "config.guess tot nu merge!"
    echo -e "${ROSU}Output: $RESULT${NC}"
    log_warn "Revert la backup..."
    cp config.guess.bak config.guess
    cp config.sub.bak config.sub
    exit 1
fi

# Cleanup
rm -f config.guess.bak config.sub.bak

echo ""
echo -e "${VERDE}═══════════════════════════════════════${NC}"
echo -e "${VERDE}Fix aplicat cu succes!${NC}"
echo -e "${VERDE}═══════════════════════════════════════${NC}"
echo ""
echo "Acum poți rula: ./configure"

