#!/usr/bin/env bash

if [ -z "$1" ]; then
    echo "Использование: $0 <папка_для_поиска>"
    exit 1
fi

TARGET_DIR="$1"

if [ ! -d "$TARGET_DIR" ]; then
    echo "Ошибка: папка '$TARGET_DIR' не существует!"
    exit 1
fi

echo "Поиск строк в двойных кавычках в файлах .gd (исключая комментарии)..."
echo "Папка: $TARGET_DIR"
echo "=========================================="

FOUND_MATCHES=0

# Используем Process Substitution вместо пайплайна в цикле
while IFS= read -r file; do
    # Используем awk для поиска строк с кавычками, исключая комментарии
    # и экранированные кавычки
    MATCHES=$(awk '
    BEGIN { line_num = 0 }
    {
        line_num++
        original_line = $0
        line = $0
        
        # Ищем первый #, который не находится внутри кавычек
        in_quote = 0
        for (i = 1; i <= length(line); i++) {
            char = substr(line, i, 1)
            prev_char = substr(line, i-1, 1)
            
            # Если находим неэкранированную кавычку, меняем состояние
            if (char == "\"" && prev_char != "\\") {
                in_quote = !in_quote
            }
            
            # Если находим # вне кавычек, обрезаем строку до этого места
            if (char == "#" && !in_quote) {
                line = substr(line, 1, i-1)
                break
            }
        }
        
        # Удаляем начальные и конечные пробелы
        gsub(/^[[:space:]]+|[[:space:]]+$/, "", line)
        
        if (index(original_line, "\"\"\"") == 0) {
          # Ищем непустые строки с двойными кавычками
          if (line ~ /"[^"\\]*"/) {
              print line_num ": " original_line
          }
       }
    }
    ' "$file")
    
    if [ -n "$MATCHES" ]; then
        FOUND_MATCHES=1
        echo "Файл: $file"
        echo "$MATCHES" | while IFS= read -r match_line; do
            echo "  Строка $match_line"
        done
        echo ""
    fi
done < <(find "$TARGET_DIR" -type f -name "*.gd" -not -path "./addons/*")

if [ "$FOUND_MATCHES" -eq 0 ]; then
    exit 0
fi

exit 1
