package createSubReport;
use strict;
use warnings;

sub new
{
    my $class = shift;
    my $self = {
        _nodeId 		=> shift,
        _nodeName		=> shift,
        _subquery		=> shift,
        _description	=> shift,
        _interval		=> "1 day",
        _firstColor		=> "#0099FF",
        _secondColor	=> "#33CC00",
        _filename		=> undef,
    };
    bless $self, $class;
    return $self;
}

sub setNodeId {
    my ( $self, $nodeId ) = @_;
    $self->{_nodeId} = $nodeId if defined($nodeId);
    return $self->{_nodeId};
}

sub getNodeId {
    my( $self ) = @_;
    return $self->{_nodeId};
}

sub setNodeName {
    my ( $self, $nodeName ) = @_;
    $self->{_nodeName} = $nodeName if defined($nodeName);
    return $self->{_nodeName};
}

sub getNodeName {
    my( $self ) = @_;
    return $self->{_nodeName};
}


sub setSubQuery {
    my ( $self, $subquery ) = @_;
    $self->{_subquery} = $subquery if defined($subquery);
    return $self->{_subquery};
}

sub getSubQuery {
    my( $self ) = @_;
    return $self->{_subquery};
}

sub setDescription {
    my ( $self, $description ) = @_;
    $self->{_description} = $description if defined($description);
    return $self->{_description};
}

sub getDescription {
    my( $self ) = @_;
    return $self->{_description};
}

sub setInterval {
    my ( $self, $interval ) = @_;
    $self->{_interval} = $interval if defined($interval);
    return $self->{_interval};
}

sub getInterval {
    my( $self ) = @_;
    return $self->{_interval};
}

sub setFirstColor {
    my ( $self, $firstColor ) = @_;
    $self->{_firstColor} = $firstColor if defined($firstColor);
    return $self->{_firstColor};
}

sub getFirstColor {
    my( $self ) = @_;
    return $self->{_firstColor};
}

sub setSecondColor {
    my ( $self, $secondColor ) = @_;
    $self->{_secondColor} = $secondColor if defined($secondColor);
    return $self->{_secondColor};
}

sub getSecondColor {
    my( $self ) = @_;
    return $self->{_secondColor};
}

sub getFileName {
    my( $self ) = @_;
    return $self->{_filename};
}


sub createXML {
	my 	( $self ) = @_;
	
	my $some_ly;
	my $underscore_name = $self->{_nodeName};
	my $underscore_description = $self->{_description};
	
	$underscore_name =~ s/ /_/g;
	$underscore_description =~ s/ /_/g;
	
	if ($self->{_interval} eq '1 day') {$some_ly = 'daily';}
	elsif ($self->{_interval} eq '7 days') {$some_ly = 'weekly';}
	elsif ($self->{_interval} eq '1 month') {$some_ly = 'monthly';}
	else {$some_ly = 'unknown';}
	
	$self->{_filename} = $underscore_name . '-' . $some_ly . '-' . $underscore_description . '.jrxml';

	open (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="' . $self->{_nodeName} . ' ' . $self->{_description} . '" language="groovy" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="595" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="ba35f4bc-db42-4bdf-a1dd-62c124cd2091">
	<property name="ireport.zoom" value="1.0"/>
	<property name="ireport.x" value="0"/>
	<property name="ireport.y" value="0"/>
	<style name="Crosstab Data Text" hAlign="Center"/>
	<queryString>
		<![CDATA[SELECT
	object_properties.name AS nas_name,
	items.name AS parameter,
	idata_' . $self->{_nodeId} . '.idata_value AS value,
	to_timestamp(idata_' . $self->{_nodeId} . '.idata_timestamp) AS date
FROM
	object_properties
INNER JOIN
	items
ON
	object_properties.object_id = items.node_id' . $self->{_subquery} . '
INNER JOIN
	idata_' . $self->{_nodeId} . '
ON
	items.item_id = idata_' . $self->{_nodeId} . '.item_id AND idata_' . $self->{_nodeId} . '.idata_timestamp > extract (epoch from ((now() - interval \'' . $self->{_interval} . '\')::timestamp)) AND idata_' . $self->{_nodeId} . '.idata_value ~ \'^[0-9]+\'
ORDER BY
	date]]>
	</queryString>
	<field name="nas_name" class="java.lang.String"/>
	<field name="parameter" class="java.lang.String"/>
	<field name="value" class="java.lang.Float"/>
	<field name="date" class="java.sql.Timestamp"/>
	<group name="nas_name">
		<groupExpression><![CDATA[$F{nas_name}]]></groupExpression>
	</group>
	<background>
		<band splitType="Stretch"/>
	</background>
	<summary>
		<band height="802" splitType="Stretch">
			<timeSeriesChart>
				<chart theme="default">
					<reportElement uuid="938374e8-ed04-4168-bd19-677f0dcd8300" x="0" y="0" width="536" height="802"/>
					<chartTitle>
						<font size="14"/>
						<titleExpression><![CDATA["' . $self->{_nodeName} . ' ' . $self->{_description} . '"]]></titleExpression>
					</chartTitle>
					<chartSubtitle/>
					<chartLegend position="Bottom"/>
				</chart>
				<timeSeriesDataset timePeriod="Minute">
					<timeSeries>
						<seriesExpression><![CDATA[$F{parameter}]]></seriesExpression>
						<timePeriodExpression><![CDATA[$F{date}]]></timePeriodExpression>
						<valueExpression><![CDATA[$F{value}]]></valueExpression>
					</timeSeries>
				</timeSeriesDataset>
				<timeSeriesPlot isShowLines="true" isShowShapes="false">
					<plot labelRotation="0.0">
						<seriesColor seriesOrder="0" color="' . $self->{_firstColor} . '"/>
						<seriesColor seriesOrder="1" color="' . $self->{_secondColor} . '"/>
					</plot>
				</timeSeriesPlot>
			</timeSeriesChart>
		</band>
	</summary>
</jasperReport>

';

	close FILE;
}

1;