package Utils;
use strict;
use warnings;
use Data::Dumper;


sub generateOutput {
    my ($outputfile, $rows, $header, $record, $footer, $values) = @_;

    return 0 if not defined $record;
 
    if(open FILE, ">$outputfile") { 
        print FILE &$header($values) if defined $header;
        
        foreach my $r (@$rows) {
            my $record_alt = &$record($r, $values); 
            print FILE $record_alt;
        }

        print FILE &$footer($values) . "\n"  if defined $footer; 
        close FILE;

        return 1; 
    } 
    else {
        return 0;    
    }
}


sub generateEmails {
    my ($tool, $to, $from, $subject, $rows, $header, $record, $footer, $values, $summary) = @_;
   
    my ($msg, $body) = ("", "");
    if($summary eq "yes") {
        foreach my $r (@$rows) {
            $body .= &$record($r, $values) if defined $record;
        }
      
        if($body ne "") {
            $msg .= &$header($values) if defined $header;
            $msg .= $body;
            $msg .= &$footer($values) if defined $footer;

            foreach my $recipient (@$to) {
                    sendEmail($tool, $recipient, $from, $subject, $msg) if defined $record;
            }
        }
    }
    else {
        foreach my $r (@$rows) {
            $msg  = "";
            $msg .= &$header($values) if defined &$header;
            $msg .= &$record($r, $values);
            $msg .= &$footer($values) . "\n" if defined $footer;
            
            if(defined $record) {
                foreach my $recipient (@$to) {
                    sendEmail($tool, $recipient, $from, $subject, $msg) if defined $record;
                }
            }
        }
    }
}

sub sendEmail {
    my($tool, $to, $from, $subject, $body) = @_;

    if(($from !~ /^(\w|\-|\_|\.)+\@((\w|\-|\_)+\.)+[a-zA-Z]{2,}$/) || ($from =~ /\.@|\.\./)) {
        print "Senders address ('$from') is not valid!\n";
        return 0;
    } 
     
    if(($to !~ /^(\w|\-|\_|\.)+\@((\w|\-|\_)+\.)+[a-zA-Z]{2,}$/) || ($to =~ /\.@|\.\./)) {
        print "Recipients address ('$to') is not valid!\n";
        return 0;
    } 

    if($subject eq "") {
        print "Subject cannot be empty!\n";
        return 0;
    }

    if(open(MAIL, "|/usr/sbin/$tool -t")) {
        print MAIL "To: $to\n";
        print MAIL "From: $from\n";
        print MAIL "Subject: $subject\n\n";

        print MAIL "$body";
        close(MAIL);
        return 1;
    }
    else {
        return (0, "Sending email failed: $!");
    } 
}

sub fetchall_array_hashref {
    my ($dbh, $query) = @_;

    my $sth = $$dbh->prepare($query);
    $sth->execute();

    my (@rows, $x);
    push(@rows, $x) while ($x  = $sth->fetchrow_hashref());

    return @rows;
}


1;