<?php
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\PHPMailer;

function fillString($string, $targetlength)
{
    while(strlen($string) < $targetlength)
    {
        $string = "0".$string;
    }

    return $string;
}

function left($str, $length) 
{
    return substr($str, 0, $length);
}

function right($str, $length) 
{
    return substr($str, -$length);
}

function generateToken($length): string {
    $chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    $res = "";
    for($i = 0; $i < $length; $i++) {
        $index = random_int(0, strlen($chars) - 1);
        $res = $res.substr($chars, $index, 1);
    }
    return $res;
}

function htmlToPlain($message): string {
    $messageNew = str_replace('<br/>', "\n", $message);
    $messageNew = preg_replace('/<a href="(.*)">(.*)<\\/a>/', "$2: $1", $messageNew);
    return $messageNew;
}

function sendMail($email, $message, $subject, $title, $preheader): bool {
    include_once('lib/phpmailer/Exception.php');
    include_once('lib/phpmailer/PHPMailer.php');
    include_once('lib/phpmailer/SMTP.php');
    include_once('app/HTML.php');
    global $RUNTIME;

    $mailer = new PHPMailer(true);

    try {
        $mailer->isSMTP();
        $mailer->Host = $RUNTIME['SMTP']['SERVER'];
        $mailer->Port = $RUNTIME['SMTP']['PORT'];
        $mailer->Username = $RUNTIME['SMTP']['ADDRESS'];
        $mailer->Password = $RUNTIME['SMTP']['PASS'];
        $mailer->SMTPAuth = true;
        $mailer->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;

        $mailer->setFrom($RUNTIME['SMTP']['ADDRESS'], $RUNTIME['SMTP']['NAME']);
        $mailer->addAddress($email);

        $mailer->isHTML(true);
        $mailer->Subject = $subject;
        $mailHtml = new HTML();
        $mailHtml->importHTML("mail.html");
        $mailHtml->setHTMLTitle($title);
        $mailHtml->ReplaceLayoutInhalt('%%MESSAGE%%', $message);
        $mailHtml->ReplaceLayoutInhalt('%%PREHEADER%%', $preheader);
        $mailHtml->build();
        $mailer->Body = $mailHtml->ausgabe();
        $mailer->AltBody = htmlToPlain($message);

        $mailer->send();
        return true;
    } catch(Exception $e) {
        error_log('Could not send email: '.$mailer->ErrorInfo);
        return false;
    }
}

function getDataFromHTTP($URL, $contend = "", $requestTyp = "application/text")
{
    try
    {
        if($contend != "")
        {
            return file_get_contents($URL, true, stream_context_create(array('http' => array('header'  => 'Content-type: '.$requestTyp, 'method' => 'POST', 'timeout' => 0.5, 'content' => $contend))));
        }else{
            return file_get_contents($URL);
        }
    } catch (Exception $e) {
        echo "(HTTP REQUEST) error while conntect to remote server. : ".$URL;
    }
}

function sendInworldIM($fromUUID, $toUUID, $fromName, $targetURL, $text) 
{
    $rawXML	=	"<?xml version=\"1.0\" encoding=\"utf-8\"?><methodCall><methodName>grid_instant_message</methodName><params><param><value><struct><member><name>position_x</name><value><string>0</string></value></member><member><name>position_y</name><value><string>0</string></value></member><member><name>position_z</name><value><string>0</string></value></member><member><name>to_agent_id</name><value><string>".$toUUID."</string></value></member><member><name>from_agent_session</name><value><string>00000000-0000-0000-0000-000000000000</string></value></member><member><name>im_session_id</name><value><string>".$fromUUID."</string></value></member><member><name>from_agent_name</name><value><string>".$fromName."</string></value></member><member><name>from_agent_id</name><value><string>".$fromUUID."</string></value></member><member><name>binary_bucket</name><value><string>AA==</string></value></member><member><name>region_handle</name><value><i4>0</i4></value></member><member><name>region_id</name><value><string>00000000-0000-0000-0000-000000000000</string></value></member><member><name>parent_estate_id</name><value><string>1</string></value></member><member><name>timestamp</name><value><string>".time()."</string></value></member><member><name>dialog</name><value><string>AA==</string></value></member><member><name>offline</name><value><string>AA==</string></value></member><member><name>from_group</name><value><string>FALSE</string></value></member><member><name>message</name><value><string>".$text."</string></value></member></struct></value></param></params></methodCall>";
    getDataFromHTTP($targetURL, $rawXML, "text/xml");
}
?>