package createMainXML;
use strict;
use warnings;
use Data::UUID;

sub new
{
    my $class = shift;
    my $self = {
        _filename 		=> shift,
		# For Linux machines you should set the folder in format /folder/folder/
		# For Windows machines you should set the folder in format C:\\folder\\folder\\
		# Do not forget the closing slashes.
        _folder			=> "/opt/xml-reports/",
        _position		=> 0,
        _subreportName	=> undef,
    };
    bless $self, $class;
    return $self;
}

sub setFileName {
    my ( $self, $filename ) = @_;
    $self->{_filename} = $filename if defined($filename);
    return $self->{_filename};
}

sub getFileName {
    my( $self ) = @_;
    return $self->{_filename};
}

sub setSubReportName {
    my ( $self, $subreportName ) = @_;
    $self->{_subreportName} = $subreportName if defined($subreportName);
    return $self->{_subreportName};
}

sub setFolder {
    my ( $self, $folder ) = @_;
    $self->{_folder} = $folder if defined($folder);
    return $self->{_folder};
}

sub getSubReportName {
    my( $self ) = @_;
    return $self->{_subreportName};
}

sub createXML {
	my ( $self ) = @_;
	my $ug = new Data::UUID;
	my $uuid = $ug->create_from_name_str(NameSpace_URL, $self->{_filename});

	open (FILE, '>', $self->{_filename}) or die "Can't create file $self->{_filename}";
	
	print FILE '<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Daily system load" language="groovy" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="' . $uuid . '">
	<property name="ireport.zoom" value="1.0"/>
	<property name="ireport.x" value="0"/>
	<property name="ireport.y" value="0"/>
	<subDataset name="dataset1" uuid="ee69b9f2-f9ef-49d3-acf9-0238b8821913"/>
	<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
		<defaultValueExpression><![CDATA["' . $self->{_folder} . '"]]></defaultValueExpression>
	</parameter>
	<queryString>
		<![CDATA[]]>
	</queryString>
	<summary>
		<band height="802">
        </band>
	</summary>
</jasperReport>
';
	close FILE;
}

sub updateXML {
	my ( $self ) = @_;
	my $ug = new Data::UUID;
	my $uuid = $ug->create_from_name_str(NameSpace_URL, $self->{_subreportName});
	
	rename $self->{_filename}, "$self->{_filename}.orig";
	open FILE, ">", $self->{_filename} or die "Can't open $self->{_filename}";
	open ORIG, "<",  "$self->{_filename}.orig" or die "Can't open $self->{_filename}.orig";
	while (<ORIG>) {
			print FILE '                        <subreport>
	                                <reportElement uuid="' . $uuid . '" x="0" y="' . $self->{_position} . '" width="555" height="1"/>
	                                <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
	                                <subreportExpression class="net.sf.jasperreports.engine.JasperReport">
	                                        <![CDATA[net.sf.jasperreports.engine.JasperCompileManager.compileReport($P{SUBREPORT_DIR} + "' . $self->{_subreportName} . '")]]>
	                                </subreportExpression>
	                    </subreport>
' if /<\/band>/;
		print FILE $_;
	}	
	close ORIG;
	close FILE;
	print "\nUpdating " . $self->{_filename} . " with " . $self->{_subreportName} . " on position " . $self->{_position} . "\n";
	$self->{_position}++;
	return $self->{_position};
}


1;