#!/usr/bin/perl
#Copyright (c) 2009, Zane C. Bowers
#All rights reserved.
#
#Redistribution and use in source and binary forms, with or without modification,
#are permitted provided that the following conditions are met:
#
#   * Redistributions of source code must retain the above copyright notice,
#    this list of conditions and the following disclaimer.
#   * Redistributions in binary form must reproduce the above copyright notice,
#    this list of conditions and the following disclaimer in the documentation
#    and/or other materials provided with the distribution.
#
#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
#ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
#WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
#IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
#INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
#BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
#DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
#LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
#OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
#THE POSSIBILITY OF SUCH DAMAGE.

use warnings;
use strict;
use ZConf::Mail::GUI;
use Getopt::Std;

$Getopt::Std::STANDARD_HELP_VERSION=1;

#version function
sub main::VERSION_MESSAGE {
        print "zcmailcompose 0.1.0\n";
};

#print help
sub main::HELP_MESSAGE {
        print "\n".
		      "-a <account>  The account to use for sending.\n".
		      "-t <addresses>  The to addresses.\n".
			  "-c <addresses>  The CC addresses.\n".
			  "-f <file>  File to attach.\n".
			  "-r <<In-Reply-To value>>  This is the value to value of the In-ReplyTo header to.\n".
			  "-b <addresses>  The BCC addresses.\n\n".
              "Atleast 1 to address is required.\n\n".
              "Examples:\n".
              "zcmailcompose -t foo\@bar   Sends a email to foo\@bar.\n".
			  "zcmailcompose -t foo\@bar,this\@that   Sends a email to foo\@bar and this\@thar.\n";
		exit 1;
};

#initiates ZConf::Mail
my $zcm=ZConf::Mail->new();
if ($zcm->{error}) {
	warn('zcmailaccountmanage: Initializing ZConf::Mail failed');
	exit $zcm->{error};
}

#gets the options
my %opts=();
getopts('a:t:c:b:f:r:', \%opts);
my %args;

#makes sure that -a is defined
if (!defined($opts{a})) {
	warn('zcmailcompose: No account defined.');
	exit 1;
}

#makes sure that -t is defined
if (!defined($opts{t})) {
	warn('zcmailcompose: No to defined.');
	exit 1;
}

#breaks the to appart
my @to=split(/,/, $opts{t});

#breaks the cc apart if needed
my @cc;
if (defined($opts{c})) {
	@cc=split(/,/, $opts{c});
}

#breaks the cc apart if needed
my @bcc;
if (defined($opts{b})) {
	@bcc=split(/,/, $opts{b});
}

#breackes the files apart if needed
my @files;
if (defined($opts{f})) {
	@files=split(/,/, $opts{f});
}

#makes sure the defined account is a smtp account
if (!$opts{a} =~ /^smtp\//) {
	warn('zcmailcompose: Not a sendable account.');
	exit 1;
}

#read a set if needed
if (defined($opts{s})) {
	$zcm->readSet($opts{s});
	if ($zcm->{error}) {
			warn('zcmailaccountmanage: Error reading the set "'.$opts{s}.'"');
			exit $zcm->{error};		
	}
}

#
my %hash;
$hash{to}=\@to;
$hash{cc}=\@cc;
$hash{bcc}=\@bcc;
$hash{files}=\@files;
$hash{account}=$opts{a};


my $zcmg=ZConf::Mail::GUI->new({zcmail=>$zcm});

$zcmg->compose(\%hash);
