#!/usr/bin/perl


#Скрипт для изменения параметра ключа во всех конфигах, рекурсивно


use strict;
use warnings;
use utf8;
use Scalar::Util qw( looks_like_number );
use Encode qw(decode encode);
use Cwd 'abs_path';
use File::Basename;
use Term::ANSIColor;

binmode(STDOUT,':utf8');
binmode(STDIN,':utf8');


my $S_KEY = $ARGV[ 0 ];
my $S_VALUE = $ARGV[ 1 ];


#Get utf8 file as array of lines
sub readUTF8FileAsStringArr
{
	my $s_file_path = shift();
	open( my $file, '<:encoding( utf8 )', $s_file_path ) or die "Can't open file " . $s_file_path . "!\n";
	
	my @s_arr_of_lines = <$file>;
	chomp( @s_arr_of_lines );
	
	close( $file );
	return @s_arr_of_lines;
}


my @s_char_folders_names = `ls -d */`;
chomp( @s_char_folders_names );
for( my $i = 0; $i < @s_char_folders_names; $i++ )
{
	if( -e $s_char_folders_names[ $i ] . "/" . "params.conf" )
	{
		print( $s_char_folders_names[ $i ] . "\n" );
		
		my @s_lines = readUTF8FileAsStringArr( $s_char_folders_names[ $i ] . "/" . "params.conf" );
		for( my $j = 0; $j < @s_lines; $j++ )
		{
			if( length( $s_lines[ $j ] ) <= 0 ) { next; }
			if( index( $s_lines[ $j ], "#" ) != -1 ) { next; } #Комментарии пропускаем
			if( index( $s_lines[ $j ], "=" ) == -1 ) { next; }
			
			my $n_index = index(  $s_lines[ $j ], "=" );
			
			my $s_key = $s_lines[ $j ];
			$s_key = substr( $s_lines[ $j ], 0, $n_index ); #Удаляем все после "="
			$s_key =~ s/^\s+|\s+$//g; #Удалить пробелы в конце и начале строки
			$s_key =~ s/^\t+|\t+$//g; #Удалить табы в конце и начале строки
			
			my $s_value = $s_lines[ $j ];
			$s_value = substr( $s_lines[ $j ], $n_index + 1 ); #Удаляем все до "="
			$s_value =~ s/^\s+|\s+$//g; #Удалить пробелы в конце и начале строки
			$s_value =~ s/^\t+|\t+$//g; #Удалить табы в конце и начале строки
			$s_value =~ s/;+$//; #Удаляем ";" в конце строки 
			
			if( $s_key eq $S_KEY )
			{
				print( $s_key . "\n" );
				$s_lines[ $j ] = $s_key . " = " . $S_VALUE . ";";
			}
		}
		
		open( FILE, '>',  $s_char_folders_names[ $i ] . "/" . "params.conf" ) or die $!;
		for( my $j = 0; $j < @s_lines; $j++ )
		{
			print FILE $s_lines[ $j ] . "\n";
		}
		close( FILE );
	}
}
