#!/usr/bin/php
<?php
// System Script: Send Emails
// Input: JSON argument from argv[1] with keys: recipients (array), subject (string), message (string)
// Output: JSON result

require_once('/usr/share/ombutel/www/includes/cli.php');
require_once('/usr/share/ombutel/scripts/send_email.php');

use ombutel\email;
use ombutel\settings;

$input = isset($argv[1]) ? $argv[1] : '{}';
echo "send_emails: raw input: " . $input . "\n";
$args = json_decode($input, true);
echo "send_emails: decoded args: " . print_r($args, true) . "\n";
if (!is_array($args)) {
	echo json_encode(array('success' => false, 'error' => 'Invalid JSON input'));
	exit(1);
}

$recipients = isset($args['recipients']) ? $args['recipients'] : array();
$subject = isset($args['subject']) ? trim($args['subject']) : '';
$message = isset($args['message']) ? trim($args['message']) : '';

if (!is_array($recipients) || count($recipients) === 0) {
	echo json_encode(array('success' => false, 'error' => 'No recipients specified'));
	exit(1);
}

if ($subject === '') {
	echo json_encode(array('success' => false, 'error' => 'Subject is required'));
	exit(1);
}

if ($message === '') {
	echo json_encode(array('success' => false, 'error' => 'Message is required'));
	exit(1);
}

$from_name = isset($args['from_name']) ? $args['from_name'] : '';
$from_mail = settings::get('system_misc', 'fromemail');
$origin = email::origin();

$sent = array();
$failed = array();

foreach ($recipients as $entry) {
	if (is_array($entry)) {
		$mailto = isset($entry['email']) ? $entry['email'] : (isset($entry['address']) ? $entry['address'] : reset($entry));
	} else {
		$mailto = $entry;
	}
	$mailto = trim(strval($mailto));
	if (filter_var($mailto, FILTER_VALIDATE_EMAIL) === false) {
		$failed[] = array('email' => $mailto, 'reason' => 'Invalid email address');
		continue;
	}
	send_email($mailto, $subject, $message, $from_name, $from_mail, $origin);
	$sent[] = $mailto;
}

echo json_encode(array(
	'success' => count($sent) > 0,
	'sent' => $sent,
	'failed' => $failed,
	'total_sent' => count($sent),
	'total_failed' => count($failed),
));
