#!/usr/bin/perl
use Encode qw( from_to is_utf8 );
use Switch;
my $ServicesFileName = $ARGV[0];
my %settings=LoadKrugSettings();
my $path=$settings{'GSW_SETTINGS'}.'services.ini';
my %ServiceData=GetIniFileData($path);
my $init_d_path=$settings{'GSW_ETC'}.'rc.d/init.d/';
my $rc_0=$settings{'GSW_ETC'}.'rc.d/rc0.d/';
my $rc_1=$settings{'GSW_ETC'}.'rc.d/rc1.d/';
my $rc_6=$settings{'GSW_ETC'}.'rc.d/rc6.d/';

 open(INPUTFILE,"<$ServicesFileName");
 while (<INPUTFILE>)
 {
 	if(/(p|w)_(\S+)/)
 	{
 		my $mode="$1";
 		my $service="$2";
 		my $foundsrv=GetServiceByProcessName(\%ServiceData,$service); 		
 		if($foundsrv ne "0")
 		{
 		  my $startFileName=();
 		  my $killFileName=();
 	      switch($mode)
 	      {
 	      	case "p"
 	      	{
 	          $foundsrv->{'startprogmode'}=1;
 	          $startFileName='S'.$foundsrv->{'order'}.$foundsrv->{'processname'};
 	          $killFileName ='K'.(100-$foundsrv->{'order'}).$foundsrv->{'processname'};
              system("ln -s -f ".$init_d_path.$foundsrv->{'processname'}." ".$rc_1.$startFileName);
 	      	}
 	      	case "w"
 	      	{
 	          $foundsrv->{'startrunmode'}=1;
 	          $startFileName='S'.$foundsrv->{'order'}.$foundsrv->{'processname'};
 	          $killFileName ='K'.(100-$foundsrv->{'order'}).$foundsrv->{'processname'}; 	      		
              system("ln -s -f ".$init_d_path.$foundsrv->{'processname'}." ".$rc_0.$startFileName);
 	      	}
 	      }
          system("ln -s -f ".$init_d_path.$foundsrv->{'processname'}." ".$rc_6.$killFileName);              		             		 	          	  	 	      		
 		}
 	}
 }
 Save (\%ServiceData,$path);
 sub GetServiceByProcessName()
 {
 	(my $data, my $procname)=@_;
 	foreach $srv (keys %$data)
 	{
 	 if($data->{$srv}{'processname'} eq $procname)
 	 {
 	 	return \%{$data->{$srv}};
 	 }	
 	}
 	return 0;
 }
sub GetIniFileData()
{
	my ($filename) = @_;
	my $INIFILE;
	my $section;
	my %Data;
	if ( open( INIFILE, "<" . $filename ) != 0 )
	{
		while (<INIFILE>)
		{
			chomp;
			$_ =~ s/:.*//g;

			if (/\[.+?\]/)
			{
				$section = $_;
				from_to( $section, "cp866", "utf8" );
			}
			if (/(\.*)\=(\.*)/)
			{
				$s = "$`";
				$s =~ s/:.*//g;
				from_to( $s, "cp866", "utf8" );
				my $s1 = "$'";
				from_to( $s1, "cp866", "utf8" );
				$Data{$section}{$s} = $s1;
				undef $s;
				undef $s1;
			}
		}
		close(INIFILE);
	}
	undef $section;
	undef $INIFILE;
	undef $filename;
	return %Data;
}
sub LoadKrugSettings()
{
  my @output = `cat /gsw/etc/krug.env`;
  my %data = ();
  foreach $s (@output)
  {
    chomp ($s);
    $_ = $s;
    if(/(\.*)\=(\.*)/)
    {
        my $tmp = "$'";
        $data{"$`"}=$tmp; 
    }
  }
  return %data;
}
sub GetUniqueServiceNumber()
{
	my (%data) = @_;
	my $MaxServNum = -1;
	@keys1 = sort {
		$a =~ s/SERVICE|\[|\]//g;
		$b =~ s/SERVICE|\[|\]//g;
		$a <=> $b;
	} ( keys %data );
	$MaxServNum = $keys1[ scalar(@keys1) - 1 ];
	$MaxServNum =~ s/SERVICE|\[|\]//g;
	$MaxServNum++;
	if ( !defined($MaxServNum) )
	{
		$MaxServNum = 1;
	}
	return $MaxServNum;
}
sub GetUniqueServiceOrderNumber()
{
	my (%data) = @_;
	my $MaxOrderNum = -1;
	@keys1 =
	  sort { $data{$a}{"order"} <=> $data{$b}{"order"} } ( keys %data );
	$MaxOrderNum = $data{ $keys1[ scalar(@keys1) - 1 ] }{'order'};
	$MaxOrderNum++;
	if ( !defined($MaxOrderNum) )
	{
		$MaxOrderNum = 1;
	}
	return $MaxOrderNum;
}
sub Save()
{
	my ( $data, $path ) = @_;
	my %filedata = %$data;
	my $OUTFILE;
	open( OUTFILE, ">" . $path ) or die print "sdfsdfsdfsdf";
	foreach my $section ( keys %filedata )
	{
		my $s = $section;
		from_to( $s, "utf8", "cp866" );
		print OUTFILE $s, "\n";
		foreach my $param ( keys %{ $filedata{$section} } )
		{
			my $v = $filedata{$section}{$param};
			from_to( $v, "utf8", "cp866" );
			my $p = $param;
			from_to( $p, "utf8", "cp866" );
			print OUTFILE $p, "=", $v, "\n";
		}
	}
	close(OUTFILE);
}

