# #!/bin/bash

# echo "Corrigindo str_replace com null..."

# # 1. Corrigir str_replace com null
# find . -type f -name '*.php' -print0 | while IFS= read -r -d '' file; do
#     # Verifica se o arquivo contém o padrão
#     if grep -q 'str_replace(.*,\s*null)' "$file"; then
#         echo "Processando $file"
#         perl -pi -e 's/str_replace\(([^,]+,[^,]+),\s*null\)/str_replace($1, "")/g' "$file"
#     fi
# done

# echo "Corrigindo multiplicação de strings..."

# # 2. Corrigir multiplicação entre variáveis que podem ser strings
# find . -type f -name '*.php' -print0 | while IFS= read -r -d '' file; do
#     # Aplica a conversão para float em multiplicações entre variáveis
#     perl -pi -e 's/(\$\w+)\s*\*\s*(\$\w+)/(float)$1 * (float)$2/g' "$file"
#     # Também para multiplicações com números: $a * 5  -> (float)$a * 5
#     perl -pi -e 's/(\$\w+)\s*\*\s*(\d+)/ (float)$1 * $2/g' "$file"
#     perl -pi -e 's/(\d+)\s*\*\s*(\$\w+)/ $1 * (float)$2/g' "$file"
# done

# echo "Correções aplicadas. Teste novamente."

# #!/bin/bash

# echo "Iniciando correções para PHP 8..."

# # Backup (já deve ter sido feito fora do script)

# # 1. strtolower(null) -> strtolower($var ?? '')
# find . -type f -name '*.php' -exec perl -pi -e 's/strtolower\((\$\w+)\)/strtolower($1 ?? "")/g' {} \;

# # 2. str_replace com null subject
# find . -type f -name '*.php' -exec perl -pi -e 's/str_replace\(([^,]+,[^,]+),\s*null\)/str_replace($1, "")/g' {} \;

# # 3. Multiplicação de strings
# find . -type f -name '*.php' -exec perl -pi -e 's/(\$\w+)\s*\*\s*(\$\w+)/(float)$1 * (float)$2/g' {} \;
# find . -type f -name '*.php' -exec perl -pi -e 's/(\$\w+)\s*\*\s*(\d+)/(float)$1 * $2/g' {} \;
# find . -type f -name '*.php' -exec perl -pi -e 's/(\d+)\s*\*\s*(\$\w+)/$1 * (float)$2/g' {} \;

# # 4. Inicializar variáveis comuns (opcional, apenas se aparecerem muitos avisos)
# for var in rotuloBotao rabicho; do
#     find . -type f -name '*.php' -exec grep -l "\$$var" {} \; | while read file; do
#         if ! grep -q "\$$var =" "$file" && ! grep -q "isset(\$$var)" "$file"; then
#             sed -i "/^<?php/ a \$$var = '';" "$file"
#         fi
#     done
# done

# echo "Correções aplicadas. Teste o sistema novamente."


# #!/bin/bash
# for file in $(grep -rl 'list(.*=.*explode' paineladm/); do
#     echo "Corrigindo $file"
#     perl -pi -e '
#         s/list\(([^)]+)\)\s*=\s*explode\(([^,]+),\s*([^)]+)\);/my @parts = explode($2, $3); my @names = split(/,/, $1); my $assign = ""; for (my $i=0; $i<@names; $i++) { $names[$i] =~ s/^\s+//; $names[$i] =~ s/\s+$//; $assign .= "\$$names[$i] = \$parts[$i] ?? \"\";\n"; } $assign =~ s/\n$//; $assign/ge
#     ' "$file"
# done

#!/bin/bash

echo "🚀 Iniciando correção em massa para PHP 8..."

# 1. strtolower(null) -> strtolower($var ?? '')
find paineladm -type f -name '*.php' -exec perl -pi -e 's/strtolower\((\$\w+)\)/strtolower($1 ?? "")/g' {} \;

# 2. str_replace com null no 3º argumento (mais comum)
find paineladm -type f -name '*.php' -exec perl -pi -e 's/str_replace\(([^,]+,[^,]+),\s*(\$\w+)\)/str_replace($1, $2 ?? "")/g' {} \;

# 3. Multiplicação de variáveis: $a * $b -> (float)$a * (float)$b
find paineladm -type f -name '*.php' -exec perl -pi -e 's/(\$\w+)\s*\*\s*(\$\w+)/(float)$1 * (float)$2/g' {} \;
find paineladm -type f -name '*.php' -exec perl -pi -e 's/(\$\w+)\s*\*\s*(\d+)/(float)$1 * $2/g' {} \;
find paineladm -type f -name '*.php' -exec perl -pi -e 's/(\d+)\s*\*\s*(\$\w+)/$1 * (float)$2/g' {} \;

# 4. Acessos de array indefinido: $arr[1] -> ($arr[1] ?? '')
#    CUIDADO: isso pode modificar também índices de strings ($str[1]) – mas geralmente é seguro.
find paineladm -type f -name '*.php' -exec perl -pi -e 's/(\$\w+)\[(\d+)\]/\($1[$2] ?? ""\)/g' {} \;

# 5. Acessos de propriedade indefinida: $obj->prop -> ($obj->prop ?? '')
#    Isso também cobre $var->campo
find paineladm -type f -name '*.php' -exec perl -pi -e 's/(\$\w+->[a-zA-Z_][a-zA-Z0-9_]*)/\($1 ?? ""\)/g' {} \;

# 6. list($a,$b) = explode(...) -> versão segura com array_pad
#    Converte para a forma segura usando atribuições individuais com null coalescing
find paineladm -type f -name '*.php' -exec perl -pi -e '
    s/list\(([^)]+)\)\s*=\s*explode\(([^,]+),\s*([^)]+)\);/my @parts = explode($2, $3); my @vars = split(/,/, $1); my $assign = ""; for (my $i=0; $i<@vars; $i++) { $vars[$i] =~ s/^\s+//; $vars[$i] =~ s/\s+$//; $assign .= "\$$vars[$i] = \$parts[$i] ?? \"\";\n"; } $assign =~ s/\n$//; $assign/ge
' {} \;

# 7. Inicializar variáveis comuns que aparecem nos logs
for var in rotuloBotao rabicho resAssociadaRemetente; do
    find paineladm -type f -name '*.php' -exec grep -l "\$$var" {} \; | while read file; do
        if ! grep -q "\$$var =" "$file" && ! grep -q "isset(\$$var)" "$file"; then
            sed -i "/^<?php/ a \$$var = '';" "$file"
        fi
    done
done

echo "✅ Correções aplicadas. Execute novamente seu sistema e verifique os logs."