#!/usr/bin/perl
use strict;

use Cwd;
use Email::Stuffer;
use Net::SMTP;
use WWW::Mechanize ();

sub versende_email {
	my $emailaddr  = shift;
	my $sender     = shift;
	my $recipients = shift;
	my $subject    = shift;
	my $nachricht  = shift;
	
	my $message = <<HTMLMAIL;
	<html><body>
	<p>Sender   : $sender</p>
	<p>Emp&auml;nger : $recipients</p>
	<p>Subject  : $subject</p> 
	$nachricht
	</body></html>
HTMLMAIL
	
	# Die SMTP-Funktionen werfen dies
	eval {
		Email::Stuffer->to($emailaddr)
		  ->from('mailer@maxjosefstift.de')
		  ->html_body($message)
		  ->subject("Portalnachricht von $sender: $subject")
		  ->send;
		print "email sent.\n";
	};
	if ($@) {
		die "Mailling failed";
	}
}

my $URL = 'https://schule-infoportal.de';
my $username = $ENV{LOGNAME} || $ENV{USER} || getpwuid($<);
my $emailaddr = $username.'@localhost';

our $logname = "";
our $passwd = "";
my $config_path = getcwd;
die "$config_path/.mjs-portal is missing" unless (-f "$config_path/.mjs-portal");
require "$config_path/.mjs-portal";
# In dieser Datei werden die Variablen $logname und $passwd für den Portallogin belegt

my $ua = WWW::Mechanize->new();
#$ua->agent("Mozilla/5.0 (X11; Linux x86_64; rv:102.0)");

# to check request von mitmproxy
#$ua->proxy( [ 'http', 'https' ] => "http://localhost:8081" );
#$ua->ssl_opts( SSL_ca_file => "/home/sparky6/.mitmproxy/mitmproxy-ca-cert.pem" );

print "GET $URL/login/mjsmuc\n";
my $response = $ua->get("$URL/login/mjsmuc");
print "$response->{_rc}\n";

print "POST $URL/login/mjsmuc\n";
$ua->submit_form(
    fields    => {user => $logname, password => $passwd, },
);

print "Such Link: Postkorb\n";
my $postkorb = $ua->find_link(text_regex => qr/Postkorb/, n => 2);
my $postkorb_url = $postkorb->url();

print "Führe Link aus: Postkorb: ".$postkorb_url."\n";

$response = $ua->get($postkorb_url);
print "$response->{_rc}\n";
my $html = $ua->{content};
#print "$html\n";
$html =~ /folders_link" data-url="\/schule_portal\/info\/postkorb\/pk_folders_of_user.php\?csrf=([^&]*)/ms;
my $csrf_folders;
if (defined $1) {
	$csrf_folders = $1;
}
else {
	die "Kein Folder-Link gefunden\n";
}
$html =~ /messages_set_unread_link" value="\/schule_portal\/info\/postkorb\/pk_messages_set_unread.php\?csrf=([^&]*)/ms;
my $csrf_unread;
if (defined $1) {
	$csrf_unread = $1;
}
else {
	die "Kein Unread-Link gefunden\n";
}

print "Hole Folder\n";
my $nurl = "https://schule-infoportal.de/schule_portal/info/postkorb/pk_folders_of_user.php?csrf=$csrf_folders&nav_id=471141";
$response = $ua->get($nurl);
print "$response->{_rc}\n";
my $fjson = $ua->{content};
#print "$fjson\n";

use JSON;
my $folders = decode_json($fjson);

print "Hole Nachrichten\n";
$nurl = "https://schule-infoportal.de".$folders->[0]->{url};

$response = $ua->get($nurl);
print "$response->{_rc}\n";
my $njson = $ua->{content};
#print "$njson\n";

my $nachrichten = decode_json($njson);
my $narrref = $nachrichten->{items};
foreach my $nachricht (@$narrref) {
	if ($nachricht->{unread}) {
		# hole nachricht
		$nurl = "https://schule-infoportal.de".$nachricht->{url};
		print "Hole Nachricht\n";
		$response = $ua->get($nurl);
		print "$response->{_rc}\n";
		$njson = $ua->{content};
		#print "njson: $njson\n";
		my $content    = decode_json($njson);
		my $id         = $content->{content}->{id};
		my $sender     = $content->{content}->{author};
		my $recipients = $content->{content}->{recipients};
		my $subject    = $content->{content}->{subject};
		my $inhalt     = $content->{content}->{content};
		
		# sende mail
		versende_email($emailaddr, $sender, $recipients, $subject, $inhalt);
		
		# setze gelesen
		$nurl = "https://schule-infoportal.de/schule_portal/info/postkorb/pk_messages_set_unread.php?csrf=$csrf_unread&nav_id=471141";
		#$nurl = "https://schule-infoportal.de/schule_portal/info/postkorb/pk_messages_set_unread.php?csrf=$csrf_unread&std_nav_id=41../project/js/postkorb/overview.js";
		$response = $ua->post($nurl, ["ids" => ["$id"], "unread" => "false"]);
		print "$response->{_rc}\n";
	}
}
print "ok.\n";
