<?php

include_once("password.inc.php");

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'PHPMailer/src/Exception.php';
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';	

function SendMailMessage(PDO $pdo, string $empfaenger, string $betreff, string $body): bool
{
    // 1) Mail-Config aus DB laden
    $stmt = $pdo->prepare("SELECT * FROM config LIMIT 1");
    $stmt->execute();
    $rowconfig = $stmt->fetch(PDO::FETCH_ASSOC);

    if (!$rowconfig) {
        // Keine Config gefunden
        return false;
    }

    $mailserver     = (string)$rowconfig["mailserver"];
    $mailUsername   = (string)$rowconfig["mailUsername"];
    $mailPassword   = (string)$rowconfig["mailPassword"];
    $mailPort       = (int)$rowconfig["mailPort"];
    $mailFrom       = (string)$rowconfig["mailFrom"];
    $mailFromName   = (string)$rowconfig["mailFromName"];
    $mailSMTPSecure = (string)$rowconfig["mailSMTPSecure"]; // z.B. 'tls' oder 'ssl' oder leer

    // 2) Mail senden (UTF-8)
    $mail = new PHPMailer(true);

    try {
        $mail->SMTPDebug = 0;
        $mail->isSMTP();
        $mail->Host       = $mailserver;
        $mail->SMTPAuth   = true;
        $mail->Username   = $mailUsername;
        $mail->Password   = $mailPassword;

        if (!empty($mailSMTPSecure)) {
            $mail->SMTPSecure = $mailSMTPSecure; // 'tls' oder 'ssl'
        }

        $mail->Port = $mailPort;

        // Charset sauber setzen
        $mail->CharSet = 'UTF-8';

        // Absender / Empfänger
        $mail->setFrom($mailFrom, $mailFromName);
        $mail->addAddress($empfaenger);

        // Inhalt
        $mail->isHTML(true);
        $mail->Subject = $betreff;
        $mail->Body    = $body;

        // AltBody sinnvoll: HTML -> Text grob runterbrechen
        $mail->AltBody = trim(html_entity_decode(strip_tags(str_replace(["<br>", "<br/>", "<br />"], "\n", $body)), ENT_QUOTES, 'UTF-8'));

        $mail->send();
        return true;

    } catch (Exception $e) {
        // Optional: Logging statt echo
        // error_log("Mail error: " . $mail->ErrorInfo);
        return false;
    }
}

function SendMailMessageVorlage(PDO $pdo, string $config, int $terminid, string $vorlage)
{
    // -----------------------------------------
    // 1) LOGIN CONFIG AUSLESEN
    // -----------------------------------------
    $stmt = $pdo->prepare("SELECT * FROM config LIMIT 1");
    $stmt->execute();
    $rowconfig = $stmt->fetch(PDO::FETCH_ASSOC);

    if (!$rowconfig) {
        throw new RuntimeException("config Tabelle leer / nicht gefunden");
    }

    $mailserver          = $rowconfig["mailserver"] ?? null;
    $mailUsername        = $rowconfig["mailUsername"] ?? null;
    $mailPassword        = $rowconfig["mailPassword"] ?? null;
    $mailPort            = $rowconfig["mailPort"] ?? null;
    $mailFrom            = $rowconfig["mailFrom"] ?? null;
	$mailFromName        = $rowconfig["mailFromName"] ?? null;
    $mailSMTPSecure      = $rowconfig["mailSMTPSecure"] ?? null;
    $logintermin         = $rowconfig["logintermin"] ?? null;
    $loginwarteliste     = $rowconfig["loginwarteliste"] ?? null;
    $logingrippetermin   = $rowconfig["logingrippetermin"] ?? null;
    $logingrippewarteliste = $rowconfig["logingrippewarteliste"] ?? null;
    $anfragebestaetigung = $rowconfig["anfragebestaetigung"] ?? null;

    // -----------------------------------------
    // 2) E-Mail Vorlage laden
    // -----------------------------------------
    $stmt = $pdo->prepare("SELECT betreff, body FROM mailtemplates WHERE templetid = ?");
    $stmt->execute([$vorlage]);
    $tpl = $stmt->fetch(PDO::FETCH_ASSOC);

    if (!$tpl) {
        throw new RuntimeException("Mailtemplate nicht gefunden: templetid=" . $vorlage);
    }

    $body    = $tpl["body"];
    $betreff = $tpl["betreff"];

    // -----------------------------------------
    // 3) Daten je nach $config laden
    // -----------------------------------------
    $vorname = $nachname = $geburtstag = $tele = $plz = $ort = $strasse = null;
    $adresse = $empfaenger = $hash = null;

    // Optional-Felder
    $Zeitanzeige = null;
    $impfstofftext = null;
    $impforttext = null;
    $terminlogin = null;
    $grippeterminlogin = null;
    $wartelistelogin = null;
    $grippewartelistelogin = null;
    $anfragenlogin = null;

    $nachricht = null;
    $medikamenteins = null;
    $medikamentzwei = null;
    $anforderungart = null;
    $rezeptart = null;

    if ($config === "1") {

        // impftermin + timeslots + user  (ALT: nutzt noch user)
        // Wenn du später auch das migrierst: hier JOIN persons statt user.
        $stmt = $pdo->prepare("
            SELECT it.*, ts.*, p.*
            FROM impftermin it
            INNER JOIN timeslots ts ON it.timeid = ts.timeid
			INNER JOIN persons p ON it.userid = p.person_id
            WHERE it.terminid = ?
            LIMIT 1
        ");
        $stmt->execute([$terminid]);
        $rowtime = $stmt->fetch(PDO::FETCH_ASSOC);

        if (!$rowtime) {
            throw new RuntimeException("Termin nicht gefunden: terminid=" . $terminid);
        }

        $vorname    = $rowtime["vorname"];
        $nachname   = $rowtime["nachname"];
        $geburtstag = $rowtime["geburtstag"];
        $tele       = $rowtime["tele"];
        $plz        = $rowtime["plz"];
        $ort        = $rowtime["ort"];
        $strasse    = $rowtime["strasse"];
        $adresse    = trim($ort . " " . $plz . ", " . $strasse);

        $empfaenger = $rowtime["email"];
        $hash       = $rowtime["hash"];
        $impfortid  = $rowtime["impfortid"] ?? null;

        $date = new DateTime($rowtime["date"]);
        $datum = $date->format('d.m.Y');
        $start = substr($rowtime["start"], 0, 5);
        $ende  = substr($rowtime["ende"], 0, 5);
        $Zeitanzeige = $datum . " " . $start . "-" . $ende;

        $impfstoff = $rowtime["impfstoff"] ?? null;

        if (!empty($impfstoff)) {
            $stmt = $pdo->prepare("SELECT impfname FROM impfstoff WHERE impfid = ? LIMIT 1");
            $stmt->execute([$impfstoff]);
            $impfstofftext = $stmt->fetchColumn() ?: null;
        }

        $terminlogin       = $logintermin . "?id=" . $hash;
        $grippeterminlogin = $logingrippetermin . "?id=" . $hash;

        if (!empty($impfortid)) {
            $stmt = $pdo->prepare("SELECT adresse FROM impfort WHERE ortid = ? LIMIT 1");
            $stmt->execute([$impfortid]);
            $impforttext = $stmt->fetchColumn() ?: null;
        }

    } elseif ($config === "2") {

        // warteliste + user (ALT: nutzt noch user)
        $stmt = $pdo->prepare("
            SELECT w.*, p.*
            FROM warteliste w
			INNER JOIN persons p ON w.userid = p.person_id
            WHERE w.warteid = ?
            LIMIT 1
        ");
        $stmt->execute([$terminid]);
        $rowtime = $stmt->fetch(PDO::FETCH_ASSOC);

        if (!$rowtime) {
            throw new RuntimeException("Wartelisteneintrag nicht gefunden: warteid=" . $terminid);
        }

        $vorname    = $rowtime["vorname"];
        $nachname   = $rowtime["nachname"];
        $geburtstag = $rowtime["geburtstag"];
        $tele       = $rowtime["tele"];
        $plz        = $rowtime["plz"];
        $ort        = $rowtime["ort"];
        $strasse    = $rowtime["strasse"];
        $adresse    = trim($ort . " " . $plz . ", " . $strasse);

        $empfaenger = $rowtime["email"];
        $hash       = $rowtime["hash"];

        $wartelistelogin       = $loginwarteliste . "?id=" . $hash;
        $grippewartelistelogin = $logingrippewarteliste . "?id=" . $hash;

        $impfstoff  = $rowtime["impfstoff"] ?? null;
        $impfangebot = $rowtime["impfenangebot"] ?? null;

        if (!empty($impfstoff)) {
            $stmt = $pdo->prepare("SELECT impfname FROM impfstoff WHERE impfid = ? LIMIT 1");
            $stmt->execute([$impfstoff]);
            $impfstofftextwarte = $stmt->fetchColumn() ?: null;
        }

        // deine Funktion:
        // $impfangebottext = GetimpfenangebotName($impfangebot);

    } elseif ($config === "3") {

        // NEU: anfragen + persons (statt user)
        $stmt = $pdo->prepare("
            SELECT a.*, p.vorname, p.nachname, p.geburtstag, p.tele, p.plz, p.ort, p.strasse, p.email
            FROM anfragen a
            INNER JOIN persons p ON a.requester_person_id = p.person_id
            WHERE a.anfrageid = ?
            LIMIT 1
        ");
        $stmt->execute([$terminid]);
        $rowtime = $stmt->fetch(PDO::FETCH_ASSOC);

        if (!$rowtime) {
            throw new RuntimeException("Anfrage nicht gefunden: anfrageid=" . $terminid);
        }

        $vorname    = $rowtime["vorname"];
        $nachname   = $rowtime["nachname"];
        $geburtstag = $rowtime["geburtstag"];
        $tele       = $rowtime["tele"];
        $plz        = $rowtime["plz"];
        $ort        = $rowtime["ort"];
        $strasse    = $rowtime["strasse"];
        $adresse    = trim($ort . " " . $plz . ", " . $strasse);

        $empfaenger = $rowtime["email"];
        $hash       = $rowtime["hash"];

        $anfragenlogin = $anfragebestaetigung . "?id=" . $hash;

        $nachricht      = $rowtime["nachricht"];
        $medikamenteins = $rowtime["medikament1"];
        $medikamentzwei = $rowtime["medikament2"];
        $anforderungart = $rowtime["anforderungart"];

        $stmt = $pdo->prepare("SELECT artname FROM anfrageart WHERE artid = ? LIMIT 1");
        $stmt->execute([$anforderungart]);
        $rezeptart = $stmt->fetchColumn() ?: null;

    } elseif ($config === "4") {

        // NEU: anfragen + persons (statt user), aber wie bei dir mit utf8_decode
        $stmt = $pdo->prepare("
            SELECT a.*, p.vorname, p.nachname, p.geburtstag, p.tele, p.plz, p.ort, p.strasse, p.email
            FROM anfragen a
            INNER JOIN persons p ON a.requester_person_id = p.person_id
            WHERE a.anfrageid = ?
            LIMIT 1
        ");
        $stmt->execute([$terminid]);
        $rowtime = $stmt->fetch(PDO::FETCH_ASSOC);

        if (!$rowtime) {
            throw new RuntimeException("Anfrage nicht gefunden: anfrageid=" . $terminid);
        }

        $vorname    = utf8_decode($rowtime["vorname"]);
        $nachname   = utf8_decode($rowtime["nachname"]);
        $geburtstag = $rowtime["geburtstag"];
        $tele       = $rowtime["tele"];
        $plz        = $rowtime["plz"];
        $ort        = $rowtime["ort"];
        $strasse    = $rowtime["strasse"];
        $adresse    = trim($ort . " " . $plz . ", " . $strasse);

        $empfaenger  = $rowtime["email"];
        $hash        = $rowtime["hash"];
        $anfragenlogin = $anfragebestaetigung . "?id=" . $hash;

        $nachricht = utf8_decode($rowtime["nachricht"]);

    } else {
        throw new InvalidArgumentException("Unbekannter config-Wert: " . $config);
    }

	$body = str_replace("%BENUTZERVORNAME%", $vorname, $body);
	$body = str_replace("%BENUTZERNACHNAME%", $nachname, $body);
	$body = str_replace("%BENUTZERGEBURTSTAG%", $geburtstag, $body);
	$body = str_replace("%BENUTZERADRESSE%", $adresse, $body);
	$body = str_replace("%TERMINZEITVORGABE%", $Zeitanzeige, $body);
	$body = str_replace("%TERMINIMPFSTOFF%", $impfstofftext, $body);
	$body = str_replace("%TERMINIMPFORT%", $impforttext, $body);
	$body = str_replace("%TERMINLOGIN%", $terminlogin, $body);
	$body = str_replace("%GRIPPETERMINLOGIN%", $grippeterminlogin, $body);
	$body = str_replace("%WARTELISTELOGIN%", $wartelistelogin, $body);
	$body = str_replace("%GRIPPEWARTELISTELOGIN%", $grippewartelistelogin, $body);
	$body = str_replace("%WARTELISTEIMPFSTOFF%", $impfstofftextwarte ?? null, $body);
	$body = str_replace("%WARTELISTEIMPFANGEBOT%", GetimpfenangebotName((int)$impfangebot), $body);
	$body = str_replace("%REZEPTART%", $rezeptart, $body);
	$body = str_replace("%MEDIKAMENTNUMMEREINS%", $medikamenteins, $body);
	$body = str_replace("%MEDIKAMENTNUMMERZWEI%", $medikamentzwei, $body);
	$body = str_replace("%ANFRAGENACHRICHT%", $nachricht, $body);		
	$body = str_replace("%ANFRAGENLOGIN%", $anfragenlogin, $body);	
	//echo $body;
		
	$mail = new PHPMailer(true); 
	try {
		//Server settings
		$mail->SMTPDebug = 0;                                 // Enable verbose debug output
		$mail->isSMTP();                                      // Set mailer to use SMTP
		$mail->Host = $mailserver;
		$mail->SMTPAuth = true;                               // Enable SMTP authentication
		$mail->Username = $mailUsername;
		$mail->Password = $mailPassword;
		$mail->SMTPSecure = $mailSMTPSecure;                            // Enable TLS encryption, `ssl` also accepted
		//$mail->Port = 587;                                    // TCP port to connect to
		$mail->Port = $mailPort; 
		//Recipients
		$mail->setFrom($mailFrom , $mailFromName);
		$mail->addAddress($empfaenger);               // Name is optional


		//Content
		$mail->isHTML(true);                                  // Set email format to HTML
		$mail->Subject = $betreff;
		$mail->Body    = $body;
		$mail->AltBody = $body;
		
		$mail->send();
		echo '<b>Ihre Nachricht wurde erfolgreich versendet!</b><br>Bitte prüfen Sie Ihren Posteingang sowie Ihren Spam-Ordner!<br>';
	} catch (Exception $e) {
		echo 'Leider gab es einen Fehler bei E-Mailversand. Fehler: ', $mail->ErrorInfo;
	}
	

}





function SendMailMessageHash($empfaenger, $betreff, $body, $hash){
	
	$body = iconv('UTF-8', 'CP1252//IGNORE', $body);
	$betreff = iconv('UTF-8', 'CP1252//IGNORE', $betreff);

	$mail = new PHPMailer(true); 
	try {
		//Server settings
		$mail->SMTPDebug = 0;                                 // Enable verbose debug output
		$mail->isSMTP();                                      // Set mailer to use SMTP
		//$mail->Host = 'vwp0583.webpack.hosteurope.de';  // Specify main and backup SMTP servers
		$mail->Host = 'mx2f5c.netcup.net';
		$mail->SMTPAuth = true;                               // Enable SMTP authentication
		//$mail->Username = 'wp1085322-creutzburg';                 // SMTP username
		//$mail->Password = 'praxis.cr';  					// SMTP password
		$mail->Username = 'praxis-creutzburg@ctb-it.de';
		$mail->Password = 'Coppenbruegge123';
		$mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
		//$mail->Port = 587;                                    // TCP port to connect to
		$mail->Port = 587; 
		//Recipients
		$mail->setFrom('praxis-creutzburg@ctb-it.de', 'Praxis Creutzburg');
		#$mail->addAddress('ccreutzburg@live.de', 'Joe User');     // Add a recipient
		$mail->addAddress($empfaenger);               // Name is optional
		$mail->addReplyTo('kontakt@praxis-creutzburg.de', 'Praxis Creutzburg');
		//$mail->addBCC('Arzt@praxis-creutzburg.de');
		//$mail->addBCC("praxis@balanceacademie.de"); 
		//Attachments
		#$mail->addAttachment('/var/tmp/file.tar.gz');         // Add attachments
		#$mail->addAttachment('/tmp/image.jpg', 'new.jpg');    // Optional name

		//Content
		$mail->isHTML(true);                                  // Set email format to HTML
		$mail->Subject = $betreff;
		$mail->Body    = $body;
		$mail->AltBody = $body;
		//$mail->charSet = "UTF-8"; 
		//$mail->Encoding  = 'base64';
		
		$mail->send();
		echo '<b>Ihre Nachricht wurde erfolgreich versendet!</b><br><br>Überprüfen Sie auch Ihren Spam-Filter.<br>';
	} catch (Exception $e) {
		echo 'Leider gab es einen Fehler bei E-Mailversand. Nutzen Sie diesen Link: '.$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']. '?id=' . $hash. '<br>Mit diesem können Sie den Termin bestätigen und stornieren.<br>'; #Fehler: ', $mail->ErrorInfo;
	}



}


function GetStatus($checked){
	
	if($checked == "0"){
		$farbe ="#F0E68C";
		$checkausgabe = "nicht bestätigt";
	}else if($checked == "1"){
		$farbe = "#98FB98";
		$checkausgabe = "zugesagt";
	}else if($checked == "2"){
		$farbe = "#32CD32";
		$checkausgabe = "abgemeldet";
	}else if($checked == "3"){
		$farbe = "#32CD32";
		$checkausgabe = "vom Praxisteam abgesagt";
	}else if($checked == "4"){
		$farbe = "#32CD32";
		$checkausgabe = "vom System abgesagt";
	}else if($checked == "5"){
		$farbe = "#32CD32";
		$checkausgabe = "vom System abgesagt";
	}else if($checked == "10"){
		$farbe = "#ace7ac";
		$checkausgabe = "beantwortet";
	}else if($checked == "29"){
		$farbe = "#97ff97";
		$checkausgabe = "telefonisch beantwortet";
	}else if($checked == "30"){
		$farbe = "#32CD32";
		$checkausgabe = "gelöscht mit Info";
	}else if($checked == "31"){
		$farbe = "#32CD32";
		$checkausgabe = "gelöscht ohne Info";
	}else{
		$checkausgabe = "unbekannt";
		$farbe = "";
	}
	
	return $checkausgabe;

}

function GetStatusFarbe($checked){
	
	if($checked == "0"){
		$farbe ="#F0E68C";
		$checkausgabe = "nicht bestätigt";
	}else if($checked == "1"){
		$farbe = "#98FB98";
		$checkausgabe = "zugesagt";
	}else if($checked == "2"){
		$farbe = "#32CD32";
		$checkausgabe = "abgemeldet";
	}else if($checked == "3"){
		$farbe = "#32CD32";
		$checkausgabe = "vom Praxisteam abgesagt";
	}else if($checked == "4"){
		$farbe = "#32CD32";
		$checkausgabe = "vom System abgesagt";
	}else if($checked == "5"){
		$farbe = "#32CD32";
		$checkausgabe = "vom System abgesagt";
	}else if($checked == "10"){
		$farbe = "#ace7ac";
		$checkausgabe = "beantwortet";
	}else if($checked == "29"){
		$farbe = "#97ff97";
		$checkausgabe = "telefonisch beantwortet";
	}else if($checked == "30"){
		$farbe = "#32CD32";
		$checkausgabe = "gelöscht mit Info";
	}else if($checked == "31"){
		$farbe = "#32CD32";
		$checkausgabe = "gelöscht ohne Info";
	}else{
		$checkausgabe = "unbekannt";
		$farbe = "";
	}
	
	return $farbe;

}



function GetImpfstoffId($impfstoff){

	if($impfstoff == "Egal/Arzt entscheidet"){
		$impfstofftext = "0";
	}else if($impfstoff == "AstraZeneca"){
		$impfstofftext = "1" ;
	}else if($impfstoff == "Biontech"){
		$impfstofftext = "2";
	}else if($impfstoff == "Johnson"){
		$impfstofftext = "3";
	}else{
		$impfstofftext = "noch nicht geklärt";
	}	
	return $impfstofftext;
}

function GetImpfstoffName($impfstoff){

	if($impfstoff == 0){
		$impfstofftext = "Egal/Arzt entscheidet";
	}else if($impfstoff == 1){
		$impfstofftext = "AstraZeneca";
	}else if($impfstoff == 2){
		$impfstofftext = "Biontech";
	}else if($impfstoff == 3){
		$impfstofftext = "Johnson";
	}else{
		$impfstofftext = "noch nicht geklärt";
	}	
	return $impfstofftext;
	
}

function GetImpfstoffTermin($impfstoff){

	if($impfstoff == 0){
		$impfstofftext = "AstraZeneca";
	}else if($impfstoff == 1){
		$impfstofftext = "Biontech";
	}else if($impfstoff == 2){
		$impfstofftext = "Arzt entscheidet";
	}else{
		$impfstofftext = "noch nicht geklärt";
	}	
	return $impfstofftext;
}

function GetImpfArt($wert){

	if($wert == "1"){
		$text = "Erstimpfung";
	}else if($wert == 2){
		$text = "Zweitimpfung";
	}else if($wert == 3){
		$text = "Drittimpfung/Booster";
	}else if($wert == 4){
		$text = "Vierimpfung";
	}else if($wert == 5){
		$text = "Zweitimpfung (nur Erstimpfung)";
	}else if($wert == 6){
		$text = "Erstimpfung (einzeln)";
	}else{
		$text = "";
	}	
	return $text;
	
}

function GetBehandelt($wert){

	if($wert == 0){
		$text = "nicht behandelt";
	}else if($wert == 1){
		$text = "behandelt";
	}else{
		$text = "";
	}	
	return $text;
	
}

function GetVersicherungArt($wert){

	if($wert == 0){
		$text = "Kassenpatient";
	}else if($wert == 1){
		$text = "Privatpatient";
	}else{
		$text = "";
	}	
	return $text;
	
}

function GetOrdnungsid($wert){

	if($wert == 0){
		$text = "unklar";
	}else if($wert == 1){
		$text = "Rezept";
	}else if($wert == 2){
		$text = "Anfrage";
	}else if($wert == 3){
		$text = "Terminabsage";
	}else if($wert == 5){
		$text = "Bewerbung";
	}else{
		$text = "";
	}	
	return $text;
	
}

function GetPatientenartName($Patientenart){
	if($Patientenart == "0"){
		$impfenangebot = "Neupatient";
	}else if($Patientenart == "1"){
		$impfenangebot = "Patient";
	}else{
		$impfenangebot = "unklar";
	}
	return $impfenangebot;

}

function GetimpfenangebotName($Patientenart){
	if($Patientenart == "1"){
		$impfenangebot = "normal";
	}else if($Patientenart == "2"){
		$impfenangebot = "Springer";
	}else{
		$impfenangebot = "unklar";
	}
	return $impfenangebot;

}

function GetImpfstoffNameTermin($impfstoff){

	if($impfstoff == 0){
		$impfstofftext = "AstraZeneca";
	}else if($impfstoff == 1){
		$impfstofftext = "Biontech";
	}else{
		$impfstofftext = "noch nicht geklärt";
	}	
	return $impfstofftext;
	
}



### Togo Termine anlegen

function gototerminanlegung() {

	global $pdo;

	$statementtermin = $pdo->prepare("SELECT * FROM togo_terminvorgaben");	
	$statementtermin->execute();	
	foreach ($statementtermin as $row) {
		$togovorgabenid = $row["vorgabenid"];
		$togodate = $row["date"];
		$togostart = $row["start"];
		$togoende = $row["ende"];
		$standort = $row["standort"];
		$error = $row["error"];
		$warning = $row["warning"];
		$date = new DateTime();
		if($togodate == "Mo"){
			$date->modify('next monday');
		
		}elseif($togodate == "Di"){
			$$date->modify('next tuesday');
			#$nextday = date('Y-m-d', $nextTuesday);
		}elseif($togodate == "Mi"){
			$date->modify('next wednesday');
			#$nextday = date('Y-m-d', $nextTuesday);
		}elseif($togodate == "Do"){
			$date->modify('next thursday');
			#$nextday = date('Y-m-d', $nextTuesday);
		}elseif($togodate == "Fr"){
			$date->modify('next friday');
			#$nextday = date('Y-m-d', $nextTuesday);
		}elseif($togodate == "Sa"){
			$date->modify('next saturday');
			#$nextday = date('Y-m-d', $nextTuesday);
		}elseif($togodate == "so"){
			$date->modify('next sunday');
			#$nextday = date('Y-m-d', $nextTuesday);
		}else{
			$ausgabedate = "error";
		}
		$nextday = $date->format('Y-m-d');
		
		$i=0;
		while($i < 4){

			if($i!=0){
				#$nextday = date('Y-m-d', strtotime($nextday .' +7 day'));
				// Create a new DateTime object
				$currentDate = new DateTime($nextday);
				$datetempz = $currentDate->add(new DateInterval('P7D'));
				//Get yesterday date
				$nextday = $datetempz->format('Y-m-d');
				

			}
			$statementuser = $pdo->prepare("SELECT terminid FROM togo_termin WHERE  date=:date AND  start=:start AND  end=:end AND  standort=:standort");
			$statementuser->execute(array('date' => $nextday , 'start' => $togostart, 'end' => $togoende , 'standort' => $standort ));
			
			$count = $statementuser->rowCount();
			if($count == 0){
				$insert = $pdo->prepare("INSERT INTO togo_termin (date, start, end,standort,error,warning) VALUES (:date, :start, :end,:standort, :error, :warning)");
				$insert->execute(array('date' => $nextday , 'start' => $togostart, 'end' => $togoende , 'standort' => $standort, 'error' => $error , 'warning' => $warning ));	
				$userid = $pdo->lastInsertId();
			}		

			$i++;
		}


	
	}
	
	
}

function show_header($titeltext){
	
	echo '	
	<!DOCTYPE HTML>
	<!--
		Alpha by HTML5 UP
		html5up.net | @n33co
		Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
	-->
	<html>
		<head>
			<title>'. $titeltext .'</title>
			<meta http-equiv="content-type" content="text/html; charset=utf-8" />
			<meta name="description" content="" />
			<meta name="keywords" content="" />
			
			';
	include('meta.inc');
	
	echo '

			
			<!--[if lte IE 8]><script src="css/ie/html5shiv.js"></script><![endif]-->
			<script src="js/jquery.min.js"></script>
			<script src="js/jquery.dropotron.min.js"></script>
			<script src="js/jquery.scrollgress.min.js"></script>
			<script src="js/skel.min.js"></script>
			<script src="js/skel-layers.min.js"></script>
			<script src="js/init.js"></script>
			<noscript>
				<link rel="stylesheet" href="css/skel.css" />
				<link rel="stylesheet" href="css/style.css" />
				<link rel="stylesheet" href="css/style-wide.css" />
			</noscript>
			<!--[if lte IE 8]><link rel="stylesheet" href="css/ie/v8.css" /><![endif]-->
			
			
			
		</head>
		<body>

			<!-- Header -->
				<header id="header" class="skel-layers-fixed">
					
		';
}		
	
function GetWorkerName($workerid) {
	global $pdo;
	
	$statement = $pdo->prepare("SELECT vorname,nachname FROM users WHERE id = :id");
	$statement->execute(array('id' => $workerid));
	$user = $statement->fetch();
	$count = $statement->rowCount();
	
	if($count == 1){
		return $user["vorname"] . " " . $user["nachname"];
	}else{
		return "";
	}



}	


function ShowWartelisteTab(string $sql, array $params = []): void
{
    global $pdo;

    echo "<table width='100%'>";
    echo "<tr>
            <th style='width:10%;'>Person</th>
            <th>Kontakt</th>
            <th>Impfstoff</th>
            <th>Art</th>
            <th>Impfen mit</th>
            <th>Status</th>
            <th>Aktion</th>
          </tr>";

    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);

    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
		//echo "TEST1111";
		$impfstoff = $row["impfstoff"];
		$impfenangebot = $row["impfenangebot"];
		$Patientenart = $row["Patientenart"];
		$impfenmit = $row["impfenmit"];
		$impfenzeitraum = $row["impfenzeitraum"];
		$impfart = $row["impfart"];
		
		$impfenartstring = GetImpfArt($impfart);
		$impfenangebotstring = GetimpfenangebotName($impfenangebot);
		$patientenartstring = GetPatientenartName($Patientenart);
		// Impfstoff
		//$impfstofftext = GetImpfstoffName($impfstoff);
		// Impfstoff
		$sqlimpfstoffstring =  "SELECT impfname FROM impfstoff WHERE impfid ='" . $impfstoff . "'";
		foreach ($pdo->query($sqlimpfstoffstring) as $rowimpf) {
			$impfstofftext = $rowimpf["impfname"];	
		}
		
		$warteid = $row["warteid"];
		$Zeitanzeige = $datum . " " . $start . "-" . $ende ;
		$userid = $row["userid"];
		$checked = $row["checked"];
		$date_created = $row["date_created"];
		//echo $userid ;
		$queryuser = "Select * FROM persons WHERE person_id='" . $userid . "'";

		foreach ($pdo->query($queryuser) as $rowuser) {
			$vorname = $rowuser["vorname"];
			$nachname = $rowuser["nachname"];
			$mail = $rowuser["mail"];
			$tel = $rowuser["tele"];
			
			$geburtstag = $rowuser["geburtstag"];
			
			
			$ort = $rowuser["ort"];
			$plz = $rowuser["plz"];
			$strasse = $rowuser["strasse"];
		}
		
		$ausgabegeburstag = $geburtstag;
		#$datumausgabe= date("d.m.Y H:i", strtotime($date_created ));
		$currentDate = new DateTime($date_created);
		$datumausgabe = $currentDate->format('d.m.Y H:i');
		
		$farbe = GetStatusFarbe($checked);
		$checkausgabe = GetStatus($checked);
		
		$userausgabe = $vorname . " " . $nachname . "<br>" . $ausgabegeburstag;
		$adresse =  $plz . " " . $ort . ", " . $strasse ;		
		$kontaktdaten = $mail . "<br>" . $tel . "<br>" . $adresse;
		
		echo "<tr style='background-color:". $farbe. ";line-height:100%;'><td>$userausgabe</td><td>$kontaktdaten</td><td>$impfstofftext</td><td>$impfenangebotstring $patientenartstring <br>$impfenzeitraum<br>$impfenartstring</td><td>$impfenmit</td><td>$checkausgabe<br>$datumausgabe</td><td>
		<div style='float: left;margin:5px; height: 20px;'>
		<form action='". $_SERVER["PHP_SELF"] ."' method=POST>
			<input type=hidden name=aktion value=8>
			<input type=hidden name=warteid value=$warteid>
			<input type=submit class='btn btn-primary btn-sm' value='absagen/Löschen'>
			</form>
		</div>
		<div style='float: left;margin:5px; height: 20px;'>
		<form action='". $_SERVER["PHP_SELF"] ."' method=POST>
			<input type=hidden name=aktion value=10>
			<input type=hidden name=warteid value=$warteid>
			<input type=submit class='btn btn-primary btn-sm' value='Termin zuordnen'>
			</form>						
		</div>										
			</td></tr>
		";
		
	}

	echo "</table>";	
}	

function ShowImpfTerminTab($sql){

	global $pdo;
	echo "<table  width= 100% style='padding:0;'>";
	echo "<tr><th>Termin</th><th>Person</th><th>Impfstoff</th><th>Status</th><th style='width:25%;'>Aktion</th><tr>";
	
	foreach ($pdo->query($sql) as $row) {
		//echo "Test";
		#$datum = date("d.m.Y", strtotime($row["date"]));
		$currentDate = new DateTime($row["date"]);
		$datum = $currentDate->format('d.m.Y');
		$start = substr($row["start"],0, 5);
		$ende = substr($row["ende"],0, 5);
		$dosenanzahl = $row["impfdosen"];
		$impfstoff = $row["impfstoff"];
		$terminid = $row["terminid"];
		$last_updated = $row["last_updated"];
		$behandelt = $row["behandelt"];
		$impfart = $row["impfart"];
		
	
		$behandeltstring = GetBehandelt($behandelt);
		
		// Impfstoff
		$sqlimpfstoffstring =  "SELECT * FROM impfstoff WHERE impfid ='" . $impfstoff . "'";
		$queryimpfstoff = $pdo->query($sqlimpfstoffstring);
		$rowimpf = $queryimpfstoff->fetch(PDO::FETCH_ASSOC);
		$impfstofftext = "<b>". $rowimpf["impfname"] . "</b>";	
		
		$timeid = $row["timeid"];
		$Zeitanzeige = $datum . " " . $start . "-" . $ende ;
		$userid = $row["userid"];
		$checked = $row["checked"];
		$sqluser = "Select * FROM persons WHERE person_id='" . $userid . "'";
		$queryuser = $pdo->query($sqluser); 
		$rowuser = $queryuser->fetch(PDO::FETCH_ASSOC);
		$vorname = $rowuser["vorname"];
		$nachname = $rowuser["nachname"];
		$mail = $rowuser["mail"];
		$tel = $rowuser["tele"];
		$geburtstag = $rowuser["geburtstag"];
		if($geburtstag  == "0000-00-00"){
			$ausgabegeburstag = $jahrgang;
		}else{
			$ausgabegeburstag = $geburtstag;
		}
		
		if($behandelt == 0){
			$farbe = GetStatusFarbe($checked);
		}else{
			$farbe = "#04B404";
		}
		$checkausgabe = GetStatus($checked);
		
		$impfartausgabe = GetImpfArt($impfart);
		
		$userausgabe = $nachname . ", " . $vorname. " - ". $ausgabegeburstag . "<br>" . $tel . " - " . $mail ;
		
		echo "<tr style='background-color:". $farbe. ";' id=$terminid><td>$Zeitanzeige</td><td>$userausgabe</td><td>$impfstofftext $behandeltstring<br>$impfartausgabe</td><td>$checkausgabe<br>$last_updated<br></td><td><form action='". $_SERVER["PHP_SELF"] ."' method=POST>
			<form action='". $_SERVER["PHP_SELF"] ."' method=POST>	";
			echo '<div style="float:left; padding: 5px;">';
			if($behandelt == 0){
			echo "<input type=button class='btn btn-danger ' name=$terminid value='behandelt' onclick='behandelt(this.attributes[\"name\"].value)'>";
			}else{
			echo "<input type=button class='btn btn-primary btn-sm' name=$terminid value='unbehandelt' onclick='behandelt(this.attributes[\"name\"].value)'>";				
			}
			echo "
			</form>	
			</div>
			<div style='float:left; padding: 5px;'>
			<form action='". $_SERVER["PHP_SELF"] ."' method=POST>
			<input type=hidden name=aktion value=5>
			<input type=hidden name=terminid value=$terminid>
			<input type=submit class='btn btn-primary btn-sm' value='Absagen'>
			</form>
			</div><div style='float:left; padding: 5px;'>
			<form action='". $_SERVER["PHP_SELF"] ."' method=POST>
			<input type=hidden name=aktion value=umbuchen>
			<input type=hidden name=terminid value=$terminid>
			<input type=hidden name=userid value=$userid>
			<input type=submit class='btn btn-primary btn-sm' value='Bearbeiten'>
			</form>	
			</div>
			</td></tr>";
		
	}	

	echo "</table>";
	
}


function ImpfTerminForm($userid, $terminid, $alleTermine){
	
	global $pdo;
	
	echo "<form action='". $_SERVER['PHP_SELF'] . "' method=POST>";	
	echo "<input type=hidden name=aktion value=terminspeichern>";
	echo '<input type="hidden" name="terminid" value="'. $terminid .'" />';
	
	if($userid != 0 ){
		
		echo '<input type="hidden" name="userid" value="'. $userid .'" required />';
		$statementuser = $pdo->prepare("SELECT * FROM persons WHERE person_id = :id");
		$statementuser->execute(array('id' => $userid));
		$rowuser = $statementuser->fetch(PDO::FETCH_ASSOC);
		$nachname = $rowuser["nachname"];	
		$vorname = $rowuser["vorname"];	
		$mail = $rowuser["mail"];
		$geburtstag = $rowuser["geburtstag"];		
		$tele = $rowuser["tele"];	
		$plz = $rowuser["plz"];	
		$ort = $rowuser["ort"];	
		$strasse = $rowuser["strasse"];	
		$Patientenart = $rowuser["Patientenart"];	
		$kassenart = $rowuser["kassenart"];	
		
		echo "<h3>Kundeninfo</h3>";
		/*
		echo $vorname . " " . $nachname . "<br>";
		echo $geburtstag .  "<br>";
		echo $mail .  "<br>";
		*/
	}
	if($terminid){
		
		
		$statementtermin = $pdo->prepare("SELECT date,start,ende,impfstoff,timeslots.timeid,impfart FROM timeslots INNER JOIN impftermin ON impftermin.timeid = timeslots.timeid  WHERE terminid = :id");
		$statementtermin->execute(array('id' => $terminid));
		$rowtermin = $statementtermin->fetch();		
		
		#$datum = date("d.m.Y", strtotime($rowtermin["date"]));
		$currentDate = new DateTime($rowtermin["date"]);
		$datum = $currentDate->format('d.m.Y');
		$start = substr($rowtermin["start"],0, 5);
		$ende = substr($rowtermin["ende"],0, 5);
		
		$timeidtermin = $rowtermin["timeid"];
		echo '<input type="hidden" name="oldtimeid" value="'. $timeidtermin .'" />';
		$impfstoff = $rowtermin["impfstoff"];
		$impfart = $rowtermin["impfart"];
		// Impfstoff
		$sqlimpfstoffstring =  "SELECT * FROM impfstoff WHERE impfid ='" . $impfstoff . "'";
		$queryimpfstoff = $pdo->query($sqlimpfstoffstring);
		$rowimpf = $queryimpfstoff->fetch(PDO::FETCH_ASSOC);
		$impfstofftext = $rowimpf["impfname"];			
		/*
		$anzeige = "$datum - $start-$ende - $impfstofftext <br>";	
		echo "<h3>Aktueller Termin</h3> $anzeige <br>";
		echo "Dieser Termin wird storniert.<br>";
		*/
	}
	
	?>
		<label for="impfart">Nachname (Pflichtfeld)</label>
		<input type="text" class="form-control" name="Name" placeholder="Name" <?php if($nachname){ echo "value='". $nachname . "'";}?> required />
		<label for="impfart">Vorname (Pflichtfeld)</label>
		<input type="text" class="form-control" name="Vorname" placeholder="Vorname" <?php if($vorname){ echo "value='". $vorname . "'";}?>  required />
		<label for="impfart">E-Mail</label>
		<input type="email" class="form-control" name="Email" placeholder="Email"  <?php if($mail){ echo "value='". $mail . "'";}?>  />
		<label for="impfart">Geburtstag</label>
		<input type="date" class="form-control" name="Geburtsjahr" placeholder="Geburtsjahr"  <?php if($geburtstag){ echo "value='". $geburtstag . "'";}?>  />
		<label for="impfart">Telefon</label>
		<input type="text" class="form-control" name="Tel" placeholder="Telefon"  <?php if($tele){ echo "value='". $tele . "'";}?>  />
		<label for="impfart">Ort</label>
		<input type="text" class="form-control" name="ort" placeholder="Ort"  <?php if($ort){ echo "value='". $ort . "'";}?>  />
		<label for="impfart">PLZ</label>
		<input type="text" class="form-control" name="plz" placeholder="PLZ"  <?php if($plz){ echo "value='". $plz . "'";}?>  />
		<label for="impfart">Straße</label>
		<input type="text" class="form-control" name="strasse" placeholder="Strasse"  <?php if($strasse){ echo "value='". $strasse . "'";}?>  />
		<label for="versicherung">Versicherungsart (Pflichtfeld)</label>
		<select name="versicherung" class="form-control" required />
			<option value="0" <?php if($kassenart == 0){ echo "selected";}?> >Kassenpatient</option>
			<option value="1" <?php if($kassenart == 1){ echo "selected";}?> >Privat versichert</option>
		</select>
		<label for="Patientenart">Patientenart (Pflichtfeld)</label>
		<select name="Patientenart" class="form-control" required />
			<option value="0" <?php if($Patientenart == 0){ echo "selected";}?> >Neupatient</option>
			<option value="1" <?php if($Patientenart == 1){ echo "selected";}?> >Bestandspatient</option>
		</select>

			
	<?php

		$heute = date("Y-m-d");
		$aktuellezeit = date("h:i");
		
		if($alleTermine){
			$statement = $pdo->prepare("SELECT * FROM timeslots WHERE  date > :heute OR (date = :heute AND start > :aktuellezeit) OR timeid = :timeid ORDER BY date, start");
		}else{
			$statement = $pdo->prepare("SELECT * FROM timeslots WHERE  date > :heute OR (date = :heute AND start > :aktuellezeit AND impfdosen > 0) OR timeid = :timeid ORDER BY date, start");
		}
		$statement->execute(array('heute' => $heute , 'aktuellezeit' => $aktuellezeit, 'timeid' => $timeid, 'timeid' => $timeidtermin));
		//$timesloteauswertung = $statement->fetch();
		$timecount = $statement->rowCount();
		//$timecount =1;
		
		if($timecount > 0){
			?>
						
			<br><br>
			<label for="Terminzeitraum">Termin: (Pflichtfeld)</label>
			
			<div class="select-wrapper">
				<select name="Terminzeitraum" id="Terminzeitraum" required class="form-control" onchange="checkTerminzeitraum()">
				<?php
				
					
					//echo '<form action="'. $_SERVER['PHP_SELF'] .'" method=POST>';
					echo '<option value="">- Terminzeitraum </option>';
					//$rows = mysqli_fetch_row($query);
					//echo $row['userid'];
					foreach ($statement as $row) {
						#$datum = date("d.m.Y", strtotime($row["date"]));
						$currentDate = new DateTime($row["date"]);
						$datum = $currentDate->format('d.m.Y');
						$start = substr($row["start"],0, 5);
						$ende = substr($row["ende"],0, 5);
						$dosenanzahl = $row["impfdosen"];
						$timeid = $row["timeid"];
						
						$impfstoff = $row["impfstoff"];
						// Impfstoff
						$sqlimpfstoffstring =  "SELECT * FROM impfstoff WHERE impfid ='" . $impfstoff . "'";
						$queryimpfstoff = $pdo->query($sqlimpfstoffstring);
						$rowimpf = $queryimpfstoff->fetch(PDO::FETCH_ASSOC);
						$impfstofftext = $rowimpf["impfname"];	
						
						$value = "$timeid";
						$anzeige = "$datum - $start-$ende - $dosenanzahl Plätze frei - $impfstofftext";
						if($value == $timeidtermin){
							echo '<option value="' . $value . '" selected>' . $anzeige . '</option>';
						}else{
							echo '<option value="' . $value . '">' . $anzeige . '</option>';
						}
					}

				
				?>	
					
				</select>
				<div id="Terminzeitrauminfo"></div>
		<br>
		<label for="impfart">Handelt es sich bei der Impfung um eine Erst- oder Zweitimpfung? (Pflichtfeld)</label>
		<div class="select-wrapper">
			<select name="impfart" id="impfart" required class="form-control" onchange="zweitterminpruefen()" >
				<option value="">Erst- oder Zweitimpfung? (Bitte auswählen)!</option>
				<option value="2" <?php if($impfart == 2 || $impfart == 1){ echo "selected";}?>>Erstimpfung</option>
				<option value="3" <?php if($impfart == 3){ echo "selected";}?>>Zweitimpfung</option>
			</select>
			
		<div id="Zweittermin"></div>
		</div>				
			<br><br>
			
		
			<input type="submit" id="submitbox"  class="btn btn-primary" value="Eintrag speichern" />

		
		</form>
	<?php			
		}
	?>
		<script>
		function zweitterminpruefen() {
			var e = document.getElementById("Terminzeitraum");
			var timeidjs = e.value;
			var e = document.getElementById("impfart");
			var impfart = e.value;
			if(timeidjs == 0){
				document.getElementById("Zweittermin").innerHTML = "<h3>Bitte wählen Sie vorher einen Termin aus!<h3><br>";
				document.getElementById("impfart").value = "";
			}else if(impfart == 2){
				result = $.ajax({
					type: 'POST',
					async: false, 
					url: '../inc/zweittermin.php',
					data: ({
						timeid: timeidjs
					})
				}).responseText;
				
				document.getElementById("Zweittermin").innerHTML = result;
			}else{
				document.getElementById("Zweittermin").innerHTML = "";
			}

		}
		
		</script>

<?php
}



function Terminspeichern($userid, $timeid, $hash, $impfart){

	global $pdo;
	// Termin eintragen
	$statement = $pdo->prepare("INSERT INTO impftermin (userid, timeid, hash, coronafragen, astraok, impfart, checked) VALUES (:userid, :timeid, :hash, '0', '1',:impfart,1)");
	$statement->execute(array('userid' => $userid , 'timeid' => $timeid, 'hash' => $hash , 'impfart' => $impfart));

	$terminid = $pdo->lastInsertId();
	return $terminid;
	
}

function Terminansagen($terminid, $checked){

	global $pdo;
	// Termin eintragen
	$insert = $pdo->prepare("UPDATE impftermin SET checked = :checked WHERE terminid = :terminid");
	$insert->execute(array('checked' => $checked, 'terminid' => $terminid));	


}

function Userspeichern($vorname, $nachname, $geburtstag, $mail, $tele, $ort, $plz, $strasse, $versicherung, $Patientenart, $userid ){
	global $pdo;

	$userid = (int)$userid;
	$mail = trim((string)$mail);

	$params = [
		'vorname'      => $vorname,
		'nachname'     => $nachname,
		'geburtstag'   => $geburtstag,
		'email'        => $mail,
		'tele'         => $tele,
		'ort'          => $ort,
		'plz'          => $plz,
		'strasse'      => $strasse,
		'versicherung' => $versicherung,
		'patientenart' => $Patientenart,
	];

	if ($userid > 0) {
		$st = $pdo->prepare("
			UPDATE persons
			SET vorname=:vorname,
			    nachname=:nachname,
			    geburtstag=:geburtstag,
			    email=:email,
			    tele=:tele,
			    ort=:ort,
			    plz=:plz,
			    strasse=:strasse,
			    kassenart=:versicherung,
			    patientenart=:patientenart
			WHERE person_id=:userid
		");
		$st->execute($params + ['userid' => $userid]);
		return $userid;
	}

	$find = $pdo->prepare("
		SELECT person_id
		FROM persons
		WHERE LOWER(email)=LOWER(:email)
		  AND geburtstag=:geburtstag
		LIMIT 1
	");
	$find->execute([
		'email'      => $mail,
		'geburtstag' => $geburtstag,
	]);
	$existing = $find->fetch(PDO::FETCH_ASSOC);

	if ($existing) {
		$userid = (int)$existing['person_id'];
		$st = $pdo->prepare("
			UPDATE persons
			SET vorname=:vorname,
			    nachname=:nachname,
			    tele=:tele,
			    ort=:ort,
			    plz=:plz,
			    strasse=:strasse,
			    kassenart=:versicherung,
			    patientenart=:patientenart
			WHERE person_id=:userid
		");
		$st->execute($params + ['userid' => $userid]);
		return $userid;
	}

	$insert = $pdo->prepare("
		INSERT INTO persons
		    (vorname, nachname, geburtstag, email, tele, ort, plz, strasse, kassenart, patientenart)
		VALUES
		    (:vorname, :nachname, :geburtstag, :email, :tele, :ort, :plz, :strasse, :versicherung, :patientenart)
	");
	$insert->execute($params);
	return (int)$pdo->lastInsertId();

}

function GetImpfMailBenachrichtigung(){

		global $pdo;
		// Impfstoff
		$sqlimpfstoffstring =  "SELECT * FROM impfstoff WHERE aktivtermin ='1'";
		
		foreach ($pdo->query($sqlimpfstoffstring) as $row) {
			$impfname = $row["impfname"];
			$impfid = $row["impfid"];
			echo "<h3>$impfname</h3>";
			echo "Sie können die nächsten 30 Personen auf der 'normalen' Warteliste infomieren:<br>";
			echo "<form action='". $_SERVER['PHP_SELF'] . "' method=POST>";
			echo '<input type="hidden" name="aktion" id="aktion" value="13" />';
			echo '<input type="hidden" name="impfstoff" id="impfstoff" value="'. $impfid .'" />';
			echo '<input type="hidden" name="impfenangebot" id="impfenangebot" value="1" />';
			echo '<input type="submit" class="btn btn-primary" id="submitbox" value="Warteliste '. $impfname .' informieren" />';
			echo "</form>";				
			echo "Sie können die nächsten 30 Personen auf der 'Springer' Warteliste infomieren:<br>";
			echo "<form action='". $_SERVER['PHP_SELF'] . "' method=POST>";
			echo '<input type="hidden" name="aktion" id="aktion" value="13" />';
			echo '<input type="hidden" name="impfstoff" id="impfstoff" value="'. $impfid .'" />';
			echo '<input type="hidden" name="impfenangebot" id="impfenangebot" value="2" />';
			echo '<input type="submit" class="btn btn-primary" id="submitbox" value="Warteliste Springer '. $impfname .' informieren" />';
			echo "</form>";		
		}
		
		
	
	
}

function AuswertungImpfungdaily($datum){
	global $pdo;
	#$datumstring =  date("d.m.Y", strtotime($datum) );
	$currentDate = new DateTime($datum);
	$datumstring = $currentDate->format('d.m.Y');	
	
	$statementuser = $pdo->prepare("SELECT COUNT(CASE WHEN checked = '1' THEN 1 ELSE NULL END) AS gesamt, COUNT(CASE WHEN impfstoff = '3' AND behandelt = '1' AND impfart='3' THEN 1 ELSE NULL END) AS behandeltbiontechzweit , COUNT(CASE WHEN impfstoff = '3' AND behandelt = '1'  AND (impfart='0' OR impfart='2') THEN 1 ELSE NULL END) AS behandeltbiontecheins  , COUNT(CASE WHEN impfstoff = '3' AND checked = '1' THEN 1 ELSE NULL END) AS terminbiontech , COUNT(CASE WHEN impfstoff = '2' AND behandelt = '1'  AND impfart='3'  THEN 1 ELSE NULL END) AS behandeltastrazweit, COUNT(CASE WHEN impfstoff = '2' AND behandelt = '1'  AND (impfart='0' OR impfart='2')  THEN 1 ELSE NULL END) AS behandeltastraeins, COUNT(CASE WHEN impfstoff = '2' AND checked = '1' THEN 1 ELSE NULL END) AS terminastra, COUNT(CASE WHEN impfstoff = '4' AND checked = '1' THEN 1 ELSE NULL END) AS terminjohson, COUNT(CASE WHEN impfstoff = '3' AND behandelt = '1' THEN 1 ELSE NULL END) AS behandeltbiontech , COUNT(CASE WHEN impfstoff = '2' AND behandelt = '1' THEN 1 ELSE NULL END) AS behandeltastra, COUNT(CASE WHEN impfstoff = '4' AND behandelt = '1' THEN 1 ELSE NULL END) AS behandeltjohn FROM impftermin INNER JOIN timeslots ON impftermin.timeid = timeslots.timeid WHERE date=:date");
	$statementuser->execute(array('date' => $datum));
	$rowuser = $statementuser->fetch(PDO::FETCH_ASSOC);
	$terminbiontech = $rowuser["terminbiontech"];	
	$terminastra = $rowuser["terminastra"];	
	$terminjohson = $rowuser["terminjohson"];	
	$behandeltbiontech = $rowuser["behandeltbiontech"];	
	$behandeltastra = $rowuser["behandeltastra"];	
	$behandeltbiontechzweit = $rowuser["behandeltbiontechzweit"];	
	$behandeltastrazweit = $rowuser["behandeltastrazweit"];
	$behandeltbiontecheins = $rowuser["behandeltbiontecheins"];	
	$behandeltastraeins = $rowuser["behandeltastraeins"];
	$behandeltjohn = $rowuser["behandeltjohn"];	
	$gesamt = $rowuser["gesamt"];	
	
	echo '<div style="align:left;float: left;margin:5px;"><b>Daten für den Tag: '. $datumstring .'</b><br>Einträge gesamt: ' .$gesamt . '</div><div style="align:right;float: right;margin:5px;"><table><tr><td>Biontech</td><td>Impfung: ' .$terminbiontech . '</td><td>behandelt: ' .$behandeltbiontech . '</td><td>nötige Impfdosen: ' . ($terminbiontech - $behandeltbiontech) . '</td><td>Erst: ' . $behandeltbiontecheins. ' Zweit: ' . $behandeltbiontechzweit. '</td></tr><tr><td>AstraZeneca</td><td>Impfung: ' .$terminastra . '</td><td>behandelt: ' .$behandeltastra . '</td><td>nötige Impfdosen: ' . ($terminastra - $behandeltastra) . '</td><td>Erst: ' . $behandeltastraeins. ' Zweit: ' . $behandeltastrazweit. '</td></tr><tr><td>Johnson</td><td>Impfung: ' .$terminjohson . '</td><td>behandelt: ' .$behandeltjohn . '</td><td>nötige Impfdosen: ' . ($terminjohson - $behandeltjohn) . '</td><td></td></tr></table> </div><br>';
}

function AuswertungImpfungdailycalendar($datum){
	global $pdo;
	#$datumstring =  date("Y-m-d", strtotime($datum) );
	$currentDate = new DateTime($datum);
	$datumstring = $currentDate->format('Y-m-d');	
	
	$statementuser = $pdo->prepare("SELECT Count(checked), COUNT(CASE WHEN checked = '1' THEN 1 ELSE NULL END) AS gebucht, impfstoff FROM impftermin INNER JOIN timeslots ON impftermin.timeid = timeslots.timeid WHERE date=:date GROUP BY impfstoff");
	$statementuser->execute(array('date' => $datumstring));
	$rueckgabe = "<div><br>";
	$gesamt = 0;
	$gebuchtge = 0;
	
	foreach ($statementuser as $rowimpf) {
		$count = $rowimpf["Count(checked)"];
		$gebucht = $rowimpf["gebucht"];
		$impfid = $rowimpf["impfstoff"];
		
		$statementimpfstoff = $pdo->prepare("SELECT impfname FROM impfstoff WHERE impfid=:impfid");
		$statementimpfstoff->execute(array('impfid' => $impfid));
		$rowuser = $statementimpfstoff->fetch(PDO::FETCH_ASSOC);
		$impfname = $rowuser["impfname"];	
		#return $impfname;
		$rueckgabe .= "" . $impfname . ": " . $gebucht . " / " . $count . "<br>";
		$gesamt = $gesamt + $count; 
		$gebuchtge = $gebuchtge + $gebucht; 
	}
	if($gesamt > 0){
		$rueckgabe .= "<b>zugesagt: " . $gebuchtge . " von " . $gesamt . "</b><br></div>";
		#return '<div ><br>Einträge gesamt: ' .$gesamt . '<br>Biontech ' .$terminbiontech . '<br>AstraZeneca ' .$terminastra . '<br>Johnson ' .$terminjohson . '<br> </div>';
		return $rueckgabe;
	}else{
		return "";
	}
	
}

function AuswertungTerminedailycalendar($datum){
	global $pdo;
	#$datumstring =  date("Y-m-d", strtotime($datum) );
	$currentDate = new DateTime($datum);
	$datumstring = $currentDate->format('d.m.Y');	

	$statementuser = $pdo->prepare("SELECT SUM(impfdosen),impfstoff FROM timeslots WHERE date=:date GROUP BY impfstoff");
	$statementuser->execute(array('date' => $datumstring));
	$rueckgabe = "<div><br>";
	$gesamt = 0;
	$i=0;
	foreach ($statementuser as $rowimpf) {
		$count = $rowimpf["SUM(impfdosen)"];
		$impfid = $rowimpf["impfstoff"];
		
		$statementimpfstoff = $pdo->prepare("SELECT impfname FROM impfstoff WHERE impfid=:impfid");
		$statementimpfstoff->execute(array('impfid' => $impfid));
		$rowuser = $statementimpfstoff->fetch(PDO::FETCH_ASSOC);
		$impfname = $rowuser["impfname"];	
		#return $impfname;
		$rueckgabe .= "" . $impfname . ": " . $count . "<br>";
		$gesamt = $gesamt + $count; 
		$i++;
	}
	if($i != 0){
		$rueckgabe .= "<b>Frei Termine gesamt: " . $gesamt . "</b><br></div>";
		#return '<div ><br>Einträge gesamt: ' .$gesamt . '<br>Biontech ' .$terminbiontech . '<br>AstraZeneca ' .$terminastra . '<br>Johnson ' .$terminjohson . '<br> </div>';
		return $rueckgabe;
	}else{
		return "";
	}





}


function ImpfstoffFormAuswahl($impfstoff){
	global $pdo;
	$sqlimpfstoffstring =  "SELECT * FROM impfstoff WHERE aktivtermin ='1' OR aktivgrippe ='1'";
	foreach ($pdo->query($sqlimpfstoffstring) as $rowimpf) {
		$impfstofftext = $rowimpf["impfname"];	
		$impfid = $rowimpf["impfid"];	
		?>
		<option value='<?php echo $impfid; ?>' <?php if($impfstoff == $impfid){ echo  "selected"; } ?> ><?php echo $impfstofftext; ?></option>
	<?php
	}
	
	
}

function ImpfortFormAuswahl($impfortidcheck){
	
	global $pdo;
	$sqlimpfstoffstring =  "SELECT * FROM impfort WHERE aktiv ='1' ";
	foreach ($pdo->query($sqlimpfstoffstring) as $rowimpf) {
		$impfortid = $rowimpf["ortid"];	
		$anzeigename = $rowimpf["anzeigename"];	
		$adresse = $rowimpf["adresse"];	
		$adresse = iconv('CP1252//IGNORE', 'UTF-8' , $adresse);
		$art = $rowimpf["art"];	
		if($art){
			$ausgabe = $art . " - " . $anzeigename . " - " . $adresse;
		}else{
			$ausgabe = $anzeigename . " - " . $adresse;
		}
		?>
		<option value='<?php echo $impfortid; ?>' <?php if($impfortidcheck == $impfortid){ echo  "selected"; } ?> ><?php echo $ausgabe; ?></option>
	<?php
	}
}


function ImpfortFormAuswahlReturn(){
	
	global $pdo;
	$sqlimpfstoffstring =  "SELECT * FROM impfort WHERE aktiv ='1' ";
	$ausgabetext = "";
	foreach ($pdo->query($sqlimpfstoffstring) as $rowimpf) {
		
		$impfortid = $rowimpf["ortid"];	
		$anzeigename = $rowimpf["anzeigename"];	
		$adresse = $rowimpf["adresse"];	
		$adresse = iconv('CP1252//IGNORE', 'UTF-8' , $adresse);
		$art = $rowimpf["art"];	
		if($art){
			$ausgabe = $art . " - " . $anzeigename . " - " . $adresse;
		}else{
			$ausgabe = $anzeigename . " - " . $adresse;
		}
		
		$ausgabetext .= "<option value='" . $impfortid . "'";
		if($impfortidcheck == $impfortid){
			$ausgabetext .= "selected"; 
		} 
		$ausgabetext .= " >". $ausgabe . "</option>";
		
	}
	return $ausgabetext;
}


function TerminArtFormAuswahl($impfart){
	
	for($i=1; $i <= 5; $i++){
		
		echo "<option value='" . $i . "' ";
		
		if($impfart == $i){
			echo  "selected";
		
		}
		echo ">" . GetImpfArt($i) . "</option>";
		
	}
}

function TerminArtFormAuswahlReturn(){
	
	$ausgabe = "";
	for($i=1; $i <= 5; $i++){
		
		$ausgabe = $ausgabe . "<option value='" . $i . "' >" . GetImpfArt($i) . "</option>";
		
	}
	return $ausgabe;
}

function TerminfestlegenAusgabe($sql){
	
	global $pdo;
	
	echo '<form action="'. $_SERVER['PHP_SELF'] .'" method=POST>';
	
	foreach ($pdo->query($sql) as $row) {
		$datum = $row["date"];
		$start = $row["start"];
		$ende = $row["ende"];
		$dosenanzahl = $row["impfdosen"];
		$timeid = $row["timeid"];
		$impfstoff = $row["impfstoff"];
		$terminart = $row["terminart"];
		$impfortid = $row["impfortid"];
		
		echo "Datum: <input type=date value=$datum disabled><input name=datum[] type=hidden value=$datum > Start: <input name=Starttime[] type=time value=$start> Ende: <input name=Endetime[] type=time value='" . $ende . "'> Impfdosen: <input name=Impfdosen[] type=number min=-100 max=800 value='" . $dosenanzahl . "'> 
		 Impfstoff: <select name='impfstoff[]' id='impfstoff' required >";
		
		ImpfstoffFormAuswahl($impfstoff);

		echo "</select>";
		echo " Impfort: <select name='impfort[]' required >";
		ImpfortFormAuswahl($impfortid);
		
		echo "</select>";	
		echo " <input name=timeid[] type=hidden value='" . $timeid . "'> <br><br>";

		
	}
	
	echo '<div id=neueTermine></div>';
	echo "<br><br>";
	echo '<a class="btn btn-primary" href"javascript:void(0);" onclick="AddneueTermine()" value="">Neuer Zeitslot</a><br><br>';
	echo "<div id=divfolgetermine style='border:1px solid black;padding:5px;width: 500px;' >";
	echo "<h3>Folge von Terminen anlegen</h3><br>";
	echo "Datum: <input name=folgedate type=date id=folgedate><br>";
	echo "Startzeit: <input name=folgestartzeit type=time id=folgestartzeit><br>";
	echo "Länge eines Termins (Min): <input name=folgelaenge type=number id=folgelaenge><br>";
	echo "Anzahl der Termine: <input name=folgeanzahl type=number id=folgeanzahl><br><br>";
	echo "Impfstoff: <select name='folgeimpfstoff' id='folgeimpfstoff' required >";
	
	ImpfstoffFormAuswahl($impfstoff);	

	echo "</select><br><br>";
	echo "impfort: <select name='impfort[]' id='impfort' required >";
	
	ImpfortFormAuswahl($impfortid);

	echo "</select><br><br>";
	echo '<a class="btn btn-primary" href"javascript:void(0);" onclick="AddneueTermineFolge()" value="">Neue Zeitslots anlegen</a><br><br></div>';
	
	
	//echo "Datum: <input name=datum[] type=date > Start: <input name=Starttime[] type=time > Ende: <input name=Endetime[] type=time > Impfdosen: <input name=Impfdosen[] type=number min=0 max=800 value='0'> <input name=timeid[] type=hidden value='0'>  <br>";


 
	echo "<br><br><input type=submit name=eintragspeichern class='btn btn-primary' value='Einträge speichern'></form><br><br>";	

	
}

function checkzweitTerminImpfung($date){
	//SELECT SUM(CASE WHEN impfdosen > '0' THEN impfdosen ELSE NULL END) AS gesamt FROM timeslots WHERE date = '2021-07-16'
	global $pdo;	
	//echo "SELECT date, ZIaktiv,ZIminimal, ZImaximal,ZIbiontech,ZIastra,ZImoderna FROM timeslots INNER JOIN impfstoff ON timeslots.impfstoff = impfstoff.impfid WHERE date = :date GROUP BY impfstoff";
	$statementtermin = $pdo->prepare("SELECT impfname, date,terminart, ZIaktiv,ZIminimal,impfstoff, ZImaximal,ZIbiontech,ZIastra,ZImoderna,SUM(CASE WHEN impfdosen > '0' THEN impfdosen ELSE NULL END) AS gesamtdosen FROM timeslots INNER JOIN impfstoff ON timeslots.impfstoff = impfstoff.impfid WHERE date = :date GROUP BY impfstoff");
	$statementtermin->execute(array('date' => $date));

	foreach ($statementtermin as $rowtermin) {
		//$date = $rowtermin["date"];
		//echo "$date";
		$ZIaktiv = $rowtermin["ZIaktiv"];
		$ZIminimal = $rowtermin["ZIminimal"];
		$ZImaximal = $rowtermin["ZImaximal"];
		$ZIbiontech = $rowtermin["ZIbiontech"];
		$ZIastra = $rowtermin["ZIastra"];
		$ZImoderna = $rowtermin["ZImoderna"];	
		$impfname = $rowtermin["impfname"];	
		$terminart = $rowtermin["terminart"];	
		$gesamtdosen = $rowtermin["gesamtdosen"];	
		$ministring= "+ $ZIminimal days";
		$maxistring = "+ $ZImaximal days";
		$minimaldate = date_create($rowtermin["date"]);
		date_add($minimaldate, date_interval_create_from_date_string($ZIminimal . ' days'));
		$minimaldate = date_format($minimaldate, 'Y-m-d');
		$maximaldate = date_create($rowtermin["date"]);
		date_add($maximaldate, date_interval_create_from_date_string($ZImaximal . ' days'));
		$maximaldate = date_format($maximaldate, 'Y-m-d');
		$impfstoffstring = "";
		$terminartstring = "";
		
		if($ZIaktiv && $gesamtdosen > 0 && ($terminart == 1 || $terminart == 0) ){
			if($ZIbiontech){
				if($impfstoffstring == ""){
					$impfstoffstring = $impfstoffstring . "(impfstoff='3'";
				}else{
					$impfstoffstring = $impfstoffstring . " OR impfstoff='3'";
				}
			}
			if($ZIastra){
				if($impfstoffstring == ""){
					$impfstoffstring = $impfstoffstring . "(impfstoff='2'";
				}else{
					$impfstoffstring = $impfstoffstring . " OR impfstoff='2'";
				}
				

			}
			if($ZImoderna){
				if($impfstoffstring == ""){
					$impfstoffstring = $impfstoffstring . "(impfstoff='5'";
				}else{
					$impfstoffstring = $impfstoffstring . " OR impfstoff='5'";
				}

			}
			$impfstoffstring = $impfstoffstring . ")";
			$terminartstring = " AND (terminart='1' OR terminart='3' OR terminart='5')";
			
			$statement = $pdo->prepare("SELECT timeid FROM timeslots WHERE date>= '$minimaldate' AND date<='$maximaldate' AND $impfstoffstring $terminartstring AND impfdosen > 0");
			$statement->execute();
			$count = $statement->rowCount();
			
			if($count == 0){
				echo"<b>Für den Impfstoff $impfname gibt es zwischen dem $minimaldate und $maximaldate keine Impfdosen für die Zweitimpfung!!</b><br><br>";
			}
			
		}
	}
	
}

function ListenAnsichtTerminproTag($datum){

	global $pdo;

	//$sqlstring =  "SELECT * FROM impftermin INNER JOIN timeslots  ON impftermin.timeid = timeslots.timeid  WHERE date =:date ORDER by date  DESC, start";


	$statementtermin = $pdo->prepare("SELECT * FROM impftermin INNER JOIN timeslots  ON impftermin.timeid = timeslots.timeid  INNER JOIN persons ON persons.person_id = impftermin.userid  WHERE date =:date ORDER by start, nachname");
	$statementtermin->execute(array('date' => $datum));
	$ausgabe = "";
	$ausgabe .= "<table>";
	$ausgabe .= "<tr ><td>Zeit</td><td>Name</td><td>Geburtstag</td><td>Terminart</td><td>Impfstoff</td><td >Versicherung</td></tr>";
	
	foreach ($statementtermin as $row) {
		
	//while ($row = $query->fetch_assoc()) {
		#$datum = date("d.m.Y", strtotime($row["date"]));
		$currentDate = new DateTime($row["date"]);
		$datum = $currentDate->format('d.m.Y');	
		$start = substr($row["start"],0, 5);
		$ende = substr($row["ende"],0, 5);
		$dosenanzahl = $row["impfdosen"];
		$timeid = $row["timeid"];
		$impfstoff = $row["impfstoff"];
		$terminart = $row["terminart"];
		$userid = $row["userid"];
		$terminartstring = GetImpfArt($terminart);
		// Impfstoff
		$statementimpf = $pdo->prepare("SELECT impfname FROM impfstoff WHERE impfid =:impfid");
		$statementimpf->execute(array('impfid' => $impfstoff));
		$rowimpf = $statementimpf->fetch(PDO::FETCH_ASSOC);
		$impfstofftext = $rowimpf["impfname"];	
		
		$Zeitanzeige = $datum . " " . $start . "-" . $ende ;
		//echo $Zeitanzeige;

		//while ($rowtime = $querytime->fetch_assoc()) {
			

			$statementuser = $pdo->prepare("SELECT * FROM persons WHERE person_id=:userid");
			$statementuser->execute(array('userid' => $userid));
			$rowuser = $statementuser->fetch(PDO::FETCH_ASSOC);

			$vorname = $rowuser["vorname"];
			$nachname = $rowuser["nachname"];
			$mail = $rowuser["email"];
			$kassenart = $rowuser["kassenart"];
			#$jahrgang = $rowuser["jahrgang"];
			$geburtstag = $rowuser["geburtstag"];
			$Patientenart = $rowuser["patientenart"];
			
			$ausgabegeburstag = $geburtstag;
			$i++;
			$patientenartstring = GetPatientenartName($Patientenart);
			$kassenartstring = GetVersicherungArt($kassenart);
			//$checkausgabe = GetPatientenartName($checked);	
			$userausgabe = $vorname . " " . $nachname;
			 
			$ausgabe .= "<tr ><td>$Zeitanzeige</td><td>$userausgabe</td><td>$ausgabegeburstag / $patientenartstring</td><td>$terminartstring</td><td>$impfstofftext</td><td >$kassenartstring</td></tr>";

		
	}
	$ausgabe .= "</table>";

	return $ausgabe;
}

function TableAnsichtTermineproMonat($datum){
	
	global $pdo;

	#$monat = date("m", strtotime($datum));
	#$jahr = date("Y", strtotime($datum));
	$currentDate = new DateTime($datum);
	$monat = $currentDate->format('m');		
	$jahr = $currentDate->format('Y');	
	$statementtermin = $pdo->prepare("SELECT date, COUNT(CASE WHEN checked = '1' THEN 1 ELSE NULL END) AS gesamttermine, COUNT(terminid) as gesamtterminid, SUM(CASE WHEN impfdosen > '0' THEN impfdosen ELSE NULL END) AS gesamtdosen  FROM impftermin INNER JOIN timeslots  ON impftermin.timeid = timeslots.timeid  WHERE  month(date) =:month AND year(date) =:year ORDER by date  DESC, start");	
	$statementtermin->execute(array('date' => $datum));	
	foreach ($statementtermin as $row) {



	}
}

function build_calendar_termin($month, $year, $aktion, $aktionday) {
	$daysOfWeek = array('Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag','Sonntag');
	$firstDayOfMonth = mktime(0,0,0,$month,1,$year);
	$numberDays = date('t',$firstDayOfMonth);
	$dateComponents = getdate($firstDayOfMonth);
	$monthName = $dateComponents['month'];
	$dayOfWeek = $dateComponents['wday'] -1;
	
	if($month == 1){
		$monthbefor = "" . ($year -1) . "-12-01";
	}else{
		$monthbefor = "$year-". ($month -1) . "-01";
	}
	if($month == 12){
		$monthafter = "" . ($year +1) . "-01-01";
	}else{
		$monthafter = "$year-". ($month +1) . "-01";
	}
	

	$calendar = "";
	$calendar .= "<table class='calendar table table-condensed table-bordered' >";
	$calendar .= "<div align=center><h3><a href='". $_SERVER['PHP_SELF'] . "?a=". $aktion . "&sdate=". $monthbefor . "'><<</a> $monthName $year <a href='". $_SERVER['PHP_SELF'] . "?a=". $aktion . "&sdate=". $monthafter . "'>>></a></h3></div>";
	$calendar .= "<tr>";
	foreach($daysOfWeek as $day) {
		$calendar .= "<th class='header' style='width:14%;' >$day</th>";
	}
	$currentDay = 1;
	$calendar .= "</tr><tr >";
	if ($dayOfWeek > 0) {
		$calendar .= "<td colspan='$dayOfWeek'>&nbsp;</td>";
	}
	$month = str_pad($month, 2, "0", STR_PAD_LEFT);
	while($currentDay <= $numberDays){
		if($dayOfWeek == 7){
			$dayOfWeek = 0;
			$calendar .= "</tr><tr >";
		}
		$currentDayRel = str_pad($currentDay, 2, "0", STR_PAD_LEFT);
		$date = "$year-$month-$currentDayRel";
		
		// Is this today?
		if(date('Y-m-d') == $date) {
			$calendar .= "<td class='day success' style='height:150px;'><a href='". $_SERVER['PHP_SELF'] . "?a=". $aktionday . "&sdate=". $date . "'><div style='height:100%;width:100%'><b>$currentDay</b>";

		} else {
			$calendar .= "<td class='day'   style='height:150px;'><a href='". $_SERVER['PHP_SELF'] . "?a=". $aktionday . "&sdate=". $date . "'><div style='height:100%;width:100%'> $currentDay";

		}
		$calendar .= "<form action='". $_SERVER['PHP_SELF'] . "' name='".$date ."' method=POST><input type=hidden name=searchdate value='". $date. "'><input type=hidden name=aktion value='4'></form>";
		if($aktionday == "shday"){
			$calendar .= AuswertungImpfungdailycalendar($date);
		}else if($aktionday == "shterday"){
			$calendar .= AuswertungTerminedailycalendar($date);
		}
		
		$calendar .= "</div></a></td>";

		$currentDay++;
		$dayOfWeek++;
	}
	if($dayOfWeek != 7){
		$remainingDays = 7 - $dayOfWeek;
		$calendar .= "<td colspan='$remainingDays'>&nbsp;</td>";
	}
	$calendar .= "</tr>";
	$calendar .= "</table>";
	return $calendar;
}

function ZuruckzumKalenderTermine($datum){
	echo "<a href='impfadmin.php?a=termonth&sdate=". $datum ."' class='btn btn-primary btn-lg' >Zurück zum Kalender</a>";
	
}

function ZuruckzumKalenderTerminefestlegen($datum){
	echo "<a href='impfadmin.php?a=terimpfmonth&sdate=". $datum ."' class='btn btn-primary btn-lg' >Zurück zum Kalender</a>";
	
}

function ZuruckzumAnfrageOverView(){
		echo'	<form action="'. $_SERVER["PHP_SELF"] .'" method=POST>
	<input type=hidden name=aktion value=1>
	<input type=submit class="btn btn-primary" value="Zurück zur Anfragen-Übersicht">
	</form>';
	
}

function ZuruckzurWartelisteOverView(){
		echo'	
			<form action="wartelisteadmin.php" method=POST>
			<input type=hidden name=aktion value=7>
			<input type=submit class="btn btn-primary btn-lg" value="Zurück zur Warteliste">
			</form>';
	
}




/**
 * Checks that the user is logged in. 
 * @return Returns the row of the logged in user
 */
function check_user() {
	global $pdo;
	
	if(!isset($_SESSION['userid']) && isset($_COOKIE['identifier']) && isset($_COOKIE['securitytoken'])) {
		$identifier = $_COOKIE['identifier'];
		$securitytoken = $_COOKIE['securitytoken'];
		
		$statement = $pdo->prepare("SELECT * FROM securitytokens WHERE identifier = ? AND user_type = 'intern' LIMIT 1");
		$result = $statement->execute(array($identifier));
		$securitytoken_row = $statement->fetch();
	
		if(sha1($securitytoken) !== $securitytoken_row['securitytoken']) {
			//Vermutlich wurde der Security Token gestohlen
			//Hier ggf. eine Warnung o.ä. anzeigen
			
		} else { //Token war korrekt
			//Setze neuen Token
			$neuer_securitytoken = random_string();
			$insert = $pdo->prepare("UPDATE securitytokens SET securitytoken = :securitytoken WHERE identifier = :identifier  AND user_type = 'intern' LIMIT 1");
			$insert->execute(array('securitytoken' => sha1($neuer_securitytoken), 'identifier' => $identifier));
			setcookie('identifier', $identifier, [
			  'expires' => time() + 365*24*3600,
			  'path' => '/',
			  'secure' => true,
			  'httponly' => true,
			  'samesite' => 'Lax',
			]);
			#$_COOKIE['identifier'] = $identifier;
			setcookie("securitytoken",$securitytoken,time()+(3600*24*365)); //Valid for 1 year
			#$_COOKIE['securitytoken'] = $securitytoken;
			
			session_regenerate_id(true); // wichtig gegen Session Fixation

			$_SESSION['auth'] = [
			  'type' => 'intern',
			  'id'   => $securitytoken_row['id']
			];
			
			//Logge den Benutzer ein
			$_SESSION['userid'] = $securitytoken_row['user_id'];
		}
	}
	
	
	if(!isset($_SESSION['userid'])) {
		die('Bitte zuerst <a href="login.php">einloggen</a>');
	}
	

	$statement = $pdo->prepare("SELECT * FROM persons WHERE person_id = :id");
	$result = $statement->execute(array('id' => $_SESSION['userid']));
	$user = $statement->fetch();
	return $user;
}

function check_intern_user(): array
{
    global $pdo;

    // Bereits eingeloggt & 2FA bestätigt
    if (!empty($_SESSION['userid']) && !empty($_SESSION['2fa_verified'])) {
        return loadInternUser($_SESSION['userid']);
    }

    // Kein Remember-Device möglich
    if (empty($_COOKIE['remember_device']) || empty($_COOKIE['remember_device_token'])) {
        redirectToLogin();
    }

    $identifier = $_COOKIE['remember_device'];
    $token      = $_COOKIE['remember_device_token'];

    // Token laden
    $stmt = $pdo->prepare("
        SELECT id, user_id, securitytoken, expires_at
        FROM intern_securitytokens
        WHERE identifier = :identifier
        LIMIT 1
    ");
    $stmt->execute(['identifier' => $identifier]);
    $row = $stmt->fetch(PDO::FETCH_ASSOC);

    // Ungültig / abgelaufen
    if (
        !$row ||
        !hash_equals($row['securitytoken'], hash('sha256', $token)) ||
        ($row['expires_at'] !== null && strtotime($row['expires_at']) < time())
    ) {
        invalidateRememberDevice($identifier);
        redirectToLogin();
    }

    // Token rotieren
    $newToken = bin2hex(random_bytes(32));

    $pdo->prepare("
        UPDATE intern_securitytokens
        SET securitytoken = :token
        WHERE id = :id
    ")->execute([
        'token' => hash('sha256', $newToken),
        'id'    => $row['id']
    ]);

    setRememberDeviceCookies($identifier, $newToken);

    session_regenerate_id(true);

    $_SESSION['userid']       = (int)$row['user_id'];
    $_SESSION['2fa_verified'] = true;

    return loadInternUser($_SESSION['userid']);
}



/* ---------- Helper ---------- */
function loadInternUser(int $id): array
{
    global $pdo;

    $stmt = $pdo->prepare("SELECT * FROM intern_users WHERE id = :id LIMIT 1");
    $stmt->execute(['id' => $id]);
    $user = $stmt->fetch(PDO::FETCH_ASSOC);

    if (!$user) {
        session_destroy();
        redirectToLogin();
    }

    return $user;
}

function setRememberDeviceCookies(string $identifier, string $token): void
{
    $opts = [
        'expires'  => time() + 365 * 24 * 3600,
        'path'     => '/',
        'secure'   => true,
        'httponly' => true,
        'samesite' => 'Lax'
    ];

    setcookie('remember_device', $identifier, $opts);
    setcookie('remember_device_token', $token, $opts);
}

function invalidateRememberDevice(string $identifier): void
{
    global $pdo;

    $pdo->prepare("
        DELETE FROM intern_securitytokens WHERE identifier = :identifier
    ")->execute(['identifier' => $identifier]);
}

function redirectToLogin(): void
{
    header('Location: login.php');
    exit;
}




function check_admin_user() {
    global $pdo;

    // 1) Session
    if (!empty($_SESSION['auth']) && ($_SESSION['auth']['type'] ?? '') === 'admin') {
        $uid = (int)($_SESSION['auth']['id'] ?? 0);
        if ($uid > 0) {
            $_SESSION['userid'] = $uid; // legacy kompatibel
            $st = $pdo->prepare("SELECT * FROM users WHERE id = :id");
            $st->execute(['id' => $uid]);
            return $st->fetch(PDO::FETCH_ASSOC) ?: null;
        }
    }

    // 2) Cookie
    if (!empty($_COOKIE['identifier']) && !empty($_COOKIE['securitytoken'])) {
        $identifier    = (string)$_COOKIE['identifier'];
        $securitytoken = (string)$_COOKIE['securitytoken'];

        $st = $pdo->prepare("SELECT user_id, securitytoken FROM securitytokens WHERE identifier = ? AND user_type = 'admin' LIMIT 1");
        $st->execute([$identifier]);
        $row = $st->fetch(PDO::FETCH_ASSOC);

        if (!$row) {
            return null;
        }

        // SHA256 konsistent zum Login
        if (!hash_equals((string)$row['securitytoken'], hash('sha256', $securitytoken))) {
            // NICHT sofort Cookies löschen -> sonst Race-Logout
            return null;
        }

        // Cookie-Login erfolgreich -> Session setzen
        session_regenerate_id(true);
        $_SESSION['auth'] = [
            'type' => 'admin',
            'id'   => (int)$row['user_id'],
        ];
        $_SESSION['userid'] = (int)$row['user_id'];

        $st = $pdo->prepare("SELECT * FROM users WHERE id = :id");
        $st->execute(['id' => (int)$row['user_id']]);
        return $st->fetch(PDO::FETCH_ASSOC) ?: null;
    }

    return null;
}





/**
 * Returns true when the user is checked in, else false
 */
function is_checked_in() {
	return isset($_SESSION['userid']);
}
 
/**
 * Returns a random string
 */
function random_string() {
	if(function_exists('openssl_random_pseudo_bytes')) {
		$bytes = openssl_random_pseudo_bytes(16);
		$str = bin2hex($bytes); 
	} else if(function_exists('mcrypt_create_iv')) {
		$bytes = mcrypt_create_iv(16, MCRYPT_DEV_URANDOM);
		$str = bin2hex($bytes); 
	} else {
		//Replace your_secret_string with a string of your choice (>12 characters)
		$str = md5(uniqid('your_secret_string', true));
	}	
	return $str;
}

/**
 * Returns the URL to the site without the script name
 */
function getSiteURL() {
	$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
	return $protocol.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/';
}

/**
 * Outputs an error message and stops the further exectution of the script.
 */
function error($error_msg) {
	include("templates/header.inc.php");
	include("templates/error.inc.php");
	include("templates/footer.inc.php");
	exit();
}

function checkurlaub() {
	global $pdo;
	
	$datum = date("Y-m-d");
	//$query = mysqli_query($con, "SELECT urlaubid FROM urlaub WHERE  start<='" . date("Y-m-d") ."' AND ende>='" . date("Y-m-d") ."'");
	$statement = $pdo->prepare("SELECT urlaubid FROM urlaub WHERE  start<=:date AND ende>=:date");
	$statement->execute(array('date' => $datum));
	$count = $statement->rowCount();
	$ausgabe = "";
	
	if($count != 0){
		$ausgabe .= '<div id=urlaub class="container" style="background-color: firebrick;padding:5px;"><br>';
		$ausgabe .= "<h2>Praxis im Urlaub</h2>";
		$ausgabe .=  "Wir befinden uns aktuell im Urlaub.<br>Wenden Sie sich an unsere Vertretung oder warten Sie bis nach unserem Urlaub mit Ihrer Anfrage.<br><br>";
		$statement = $pdo->prepare("SELECT ende,vertretung,vertretertelefon,vertreteradresse,vertreterurl FROM urlaub WHERE  start<=:date AND ende>=:date");
		$result = $statement->execute(array('date' => $datum));
		$row = $statement->fetch(PDO::FETCH_ASSOC);

		//$query = mysqli_query($con, "SELECT ende,vertreter,vertretertelefon,vertreteradresse,vertreterurl FROM urlaub WHERE  start<='" . date("Y-m-d") ."' AND ende>='" . date("Y-m-d") ."' ORDER BY ende DESC");
		//$row = mysqli_fetch_assoc($query);
		$vertreter = $row["vertretung"];
		$vertretertelefon = $row["vertretertelefon"];
		$vertreteradresse = $row["vertreteradresse"];
		$vertreterurl = $row["vertreterurl"];
		$ende = $row["ende"];
		#$endeausgabe= date("d.m.Y", strtotime("+1 day",  strtotime($ende )));
		$date = new DateTime($ende);
		$date->modify('+1 day');
		$endeausgabe = $date->format('d.m.Y');
		if($vertreter){
			$ausgabe .=  "Unsere Vertretung: $vertreter <br>";
		}
		if($vertreterurl ){
			$ausgabe .=  "Webseite Vertretung: <a href=$vertreterurl >$vertreterurl</a> <br>";
		}
		if($vertretertelefon){
			$ausgabe .=  "Telefonischer Kontakt Vertretung: $vertretertelefon <br>";
		}
		if($vertreteradresse){
			$ausgabe .=  "Adresse Vertretung: $vertreteradresse <br>";
		}
		$ausgabe .=  "<br>Wir stehen Ihnen ab dem ". $endeausgabe . " wieder zur Verfügung.<br><br></div><br><br>";
	}else{
		$datum = date("Y-m-d");
		//$query = mysqli_query($con, "SELECT urlaubid FROM urlaub WHERE  start<='" . date("Y-m-d") ."' AND ende>='" . date("Y-m-d") ."'");
		$statement = $pdo->prepare("SELECT notfallid FROM notfallsprechstunde WHERE  start<=:date AND ende>=:date");
		$statement->execute(array('date' => $datum));
		$count = $statement->rowCount();
		$ausgabe = "";		
		if($count != 0){
			$ausgabe .= '<div id=urlaub class="container" style="background-color: firebrick;padding:5px;"><br>';
			$ausgabe .= "<h2>Wichtiger Hinweis</h2>";
			$ausgabe .=  "<br>";
			$statement = $pdo->prepare("SELECT ende,hinweis FROM notfallsprechstunde WHERE  start<=:date AND ende>=:date");
			$result = $statement->execute(array('date' => $datum));
			$row = $statement->fetch(PDO::FETCH_ASSOC);

			//$query = mysqli_query($con, "SELECT ende,vertreter,vertretertelefon,vertreteradresse,vertreterurl FROM urlaub WHERE  start<='" . date("Y-m-d") ."' AND ende>='" . date("Y-m-d") ."' ORDER BY ende DESC");
			//$row = mysqli_fetch_assoc($query);
			$vertreter = $row["vertretung"];
			$hinweis = $row["hinweis"];
			$ende = $row["ende"];
			#$endeausgabe= date("d.m.Y", strtotime("+1 day",  strtotime($ende )));
			$date = new DateTime($ende);
			$date->modify('+1 day');
			$endeausgabe = $date->format('d.m.Y');
			
			$ausgabe .=  $hinweis ;
			
			$ausgabe .=  "<br></div><br><br>";		
		
		}else{
			$ausgabe = "";
		}
	} 
	
	return $ausgabe ;
	
	
	
}

function geplantenUrlaubanzeigen() {
	global $pdo;
	
	$datum = date("Y-m-d");
	$statement = $pdo->prepare("SELECT urlaubid FROM urlaub WHERE  start>=:date ");
	$statement->execute(array('date' => $datum));
	$count = $statement->rowCount();
	$ausgabe = "";
	
	if($count != 0){
		$ausgabe .= '<div><br>';
		$ausgabe .= "<h2>Geplanter Urlaub der Praxis</h2>";
		$ausgabe .=  "Die Praxis befindet sich in den folgenden Zeiten im Urlaub:<br><br>";
		$statement = $pdo->prepare("SELECT start,ende,vertretung,vertretertelefon,vertreteradresse,vertreterurl FROM urlaub WHERE  start>=:date");
		$result = $statement->execute(array('date' => $datum));
	
		while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
			$vertreter = $row["vertretung"];
			$vertretertelefon = $row["vertretertelefon"];
			$vertreteradresse = $row["vertreteradresse"];
			$vertreterurl = $row["vertreterurl"];
			$ende = $row["ende"];
			$start = $row["start"];
			#$startausgabe= date("d.m.Y", strtotime($start ));
			#$endeausgabe= date("d.m.Y", strtotime($ende ));
			$date = new DateTime($start);
			$startausgabe = $date->format('d.m.Y');
			$date = new DateTime($ende);
			$endeausgabe = $date->format('d.m.Y');
			
			$ausgabe .=  "<h4>Zeitraum: $startausgabe bis $endeausgabe </h4>";
			if($vertreter){
				$ausgabe .=  "Unsere Vertretung: $vertreter <br>";
			}
			if($vertreterurl ){
				$ausgabe .=  "Webseite Vertretung: <a href=$vertreterurl >$vertreterurl</a> <br>";
			}
			if($vertretertelefon){
				$ausgabe .=  "Telefonischer Kontakt Vertretung: <a href='tel:$vertretertelefon' >$vertretertelefon</a> <br>";
			}
			if($vertreteradresse){
				$ausgabe .=  "Adresse Vertretung: <a href='http://maps.google.com/?q=$vertreteradresse' target=_blank>$vertreteradresse </a><br>";
			}
			$ausgabe .= "<br>";
		}
		$ausgabe .=  "</div>";

	}else{
		$ausgabe = "";
	} 
	
	return $ausgabe ;
	
	
	
}

function showHeaderpraxis() {

	return '
		<header>
			<img src="images/logo-arzt-creutzburg-coppen.gif" align="left" alt="Praxis Logo Creutzburg" width="40%" />
			<br>
			<h2>Praxis Heiner Creutzburg</h2>
			<br>
		</header>
		';
	
	
}

/**
 * Prüft, ob der Benutzer administrator ist
 */
function check_admin() {
	global $pdo;
	
	if(isset($_SESSION['userid'])) {
		$statement = $pdo->prepare("SELECT userid FROM users_admin WHERE userid = :id");
		$statement->execute(array('id' => $_SESSION['userid']));
		$count = $statement->rowCount();
		
		if($count == 1){
			return true;
		}else{
			return false;
		}
	}else{
		return false;
	}


}
/**
 * Prüft, ob der Benutzer Bearbeiter ist
 */
function check_worker() {
	global $pdo;
	
	if(isset($_SESSION['userid'])) {
		$statement = $pdo->prepare("SELECT userid FROM users_worker WHERE userid = :id");
		$statement->execute(array('id' => $_SESSION['userid']));
		$count = $statement->rowCount();
		
		if($count == 1){
			return true;
		}else{
			return false;
		}
	}else{
		return false;
	}


}

/**
 * Rendert eine Mailvorlage für eine Anfrage.
 *
 * Erwartet neues Schema:
 *  - anfragen.requester_person_id -> persons.person_id
 *  - persons.email (statt user.mail)
 *
 * Rückgabe:
 *  [
 *    'empfaenger' => string,
 *    'betreff'    => string,
 *    'body'       => string,
 *    'name'       => string,   // Template-Name
 *    'context'    => array     // optional: alle Daten für Debug/Logging
 *  ]
 *
 * $extraReplacements: zusätzliche Platzhalter => Werte (z.B. %TERMINZEITVORGABE% etc.)
 * $convertCp1252: nur true setzen, wenn Inhalte wirklich CP1252 in der DB sind
 */
function renderTemplateForAnfrage(PDO $pdo, int $anfrageid, string $templetid, string $anfragebestaetigung, array $extraReplacements = [], bool $convertCp1252 = false): array
{
    if ($anfrageid <= 0) {
        throw new InvalidArgumentException("Ungültige anfrageid");
    }
    $templetid = trim($templetid);
    if ($templetid === "") {
        throw new InvalidArgumentException("templetid fehlt");
    }

    // 1) Template laden
    $stmt = $pdo->prepare("
        SELECT betreff, body, name
        FROM mailtemplates
        WHERE templetid = ?
        LIMIT 1
    ");
    $stmt->execute([$templetid]);
    $tpl = $stmt->fetch(PDO::FETCH_ASSOC);

    if (!$tpl) {
        throw new RuntimeException("Mailvorlage nicht gefunden: templetid=" . $templetid);
    }

    $betreff = (string)($tpl['betreff'] ?? '');
    $body    = (string)($tpl['body'] ?? '');
    $tplName = (string)($tpl['name'] ?? '');

    // 2) Anfrage + Person laden
    $stmt = $pdo->prepare("
        SELECT
            a.*,
            p.vorname, p.nachname, p.geburtstag,
            p.tele, p.plz, p.ort, p.strasse,
            p.email
        FROM anfragen a
        INNER JOIN persons p ON a.requester_person_id = p.person_id
        WHERE a.anfrageid = ?
        LIMIT 1
    ");
    $stmt->execute([$anfrageid]);
    $row = $stmt->fetch(PDO::FETCH_ASSOC);

    if (!$row) {
        throw new RuntimeException("Anfrage nicht gefunden: anfrageid=" . $anfrageid);
    }

    $vorname    = (string)($row['vorname'] ?? '');
    $nachname   = (string)($row['nachname'] ?? '');
    $geburtstag = (string)($row['geburtstag'] ?? '');
    $tele       = (string)($row['tele'] ?? '');
    $plz        = (string)($row['plz'] ?? '');
    $ort        = (string)($row['ort'] ?? '');
    $strasse    = (string)($row['strasse'] ?? '');
    $empfaenger = (string)($row['email'] ?? '');

    $adresse = trim($ort . " " . $plz . ", " . $strasse);

    $hash = (string)($row['hash'] ?? '');
    $anfragenlogin = rtrim($anfragebestaetigung) . "?id=" . $hash;

    $nachricht      = (string)($row['nachricht'] ?? '');
    $medikament1    = (string)($row['medikament1'] ?? '');
    $medikament2    = (string)($row['medikament2'] ?? '');
    $anforderungart = $row['anforderungart'] ?? null;

    // 3) Rezeptart holen
    $rezeptart = '';
    if (!empty($anforderungart)) {
        $stmt = $pdo->prepare("SELECT artname FROM anfrageart WHERE artid = ? LIMIT 1");
        $stmt->execute([$anforderungart]);
        $rezeptart = (string)($stmt->fetchColumn() ?: '');
    }

    // 4) Standard-Platzhalter
    $replacements = [
        "%BENUTZERVORNAME%"     => $vorname,
        "%BENUTZERNACHNAME%"    => $nachname,
        "%BENUTZERGEBURTSTAG%"  => $geburtstag,
        "%BENUTZERADRESSE%"     => $adresse,
        "%REZEPTART%"           => $rezeptart,
        "%MEDIKAMENTNUMMEREINS%" => $medikament1,
        "%MEDIKAMENTNUMMERZWEI%" => $medikament2,
        "%ANFRAGENACHRICHT%"    => $nachricht,
        "%ANFRAGENLOGIN%"       => $anfragenlogin,
    ];

    // Extra-Platzhalter (z.B. Termin / Warteliste)
    // Beispiel: ['%TERMINZEITVORGABE%' => $Zeitanzeige]
    foreach ($extraReplacements as $k => $v) {
        if (!is_string($k)) continue;
        $replacements[$k] = (string)$v;
    }

    $body = str_replace(array_keys($replacements), array_values($replacements), $body);

    // 5) Encoding nur falls wirklich nötig
    if ($convertCp1252) {
        $betreff = iconv('CP1252//IGNORE', 'UTF-8', $betreff);
        $body    = iconv('CP1252//IGNORE', 'UTF-8', $body);
        $tplName = iconv('CP1252//IGNORE', 'UTF-8', $tplName);
    }

    return [
        'empfaenger' => $empfaenger,
        'betreff'    => $betreff,
        'body'       => $body,
        'name'       => $tplName,
        'context'    => [
            'anfrageid' => $anfrageid,
            'templetid' => $templetid,
            'vorname' => $vorname,
            'nachname' => $nachname,
            'geburtstag' => $geburtstag,
            'telefon' => $tele,
            'adresse' => $adresse,
            'rezeptart' => $rezeptart,
            'anfragenlogin' => $anfragenlogin,
        ],
    ];
}


function ShowFormularFragenBenutzer(){

	
	#$mintimegeburtstag = strtotime("-5 year", time());
	$currentDate = new DateTime();
	//Use the subtract function to subtract a DateInterval
	$yesterdayTime = $currentDate->sub(new DateInterval('P5Y'));
	//Get yesterday date
	$mintimegeburtstag = $yesterdayTime->format('Y-m-d');
	
	#$mindategeburtstag = date("Y-m-d", $mintimegeburtstag);

	$ausgabe = '
	<div class="6u 12u(3)">
		<label for="vorname">Vorname:</label>	
		<input type="text" name="Vorname" id="Vorname" size=12 maxlength="50"  placeholder="Vorname" required />
	</div>
	<div class="6u 12u(3)">
		<label for="Name">Nachname:</label>
		<input type="text"name="Name" size=12 maxlength="50" minlength="3" placeholder="Name" required />
	</div>
	<div class="6u 12u(3)">
		<label for="Email">E-Mail:</label>
		<input type="email" name="Email" id="Email" value="" placeholder="Email" required />
	</div>
		
	<div class="6u 12u(3)">
	<label for="Tel">Telefon (mit Vorwahl/ nur Zahlen):</label>
		<input type="number" name="Tel" size=4 maxlength="30" id="Tel" pattern="^[0-9]{6-30}$" placeholder="Telefon" required />
	</div>
	<div class="6u 12u(3)">
		<label for="plz">PLZ:</label>
		<input type="number" name="plz" size=4 maxlength="5" id=""  placeholder="PLZ" required />
	</div>
	<div class="6u 12u(3)">
		<label for="ort">Ort:</label>
		<input type="text" name="ort" size=4 maxlength="50" id=""  placeholder="Ort" required />
	</div>
	<div class="6u 12u(3)">
		<label for="strasse">Straße:</label>
		<input type="text" name="strasse" size=4 maxlength="50" id="" value="" placeholder="Straße" required />
	</div>
	<div class="6u 12u(3)">
		<label for="Geburtsjahr">Geburtstag:</label>
		<input type="date" class="input" name="Geburtsjahr" id="" value="" max="' . $mindategeburtstag . '" placeholder="Geburtsjahr"  required />
	</div>';
	return $ausgabe ;
}

function deleteOldFiles() {
	
	$directory = __DIR__ . "/upload/nexChRvmgyJWCgvWjceFugXpGFQzBBaMtuZlySuFdYkFzYoxNe";
    // Stelle sicher, dass das Verzeichnis existiert
    if (!is_dir($directory)) {
        echo "Das Verzeichnis existiert nicht.";
        return;
    }

    // Aktueller Zeitstempel
    $now = time();

    // Verzeichnis öffnen
    $files = scandir($directory);

    foreach ($files as $file) {
        $filePath = $directory . DIRECTORY_SEPARATOR . $file;

        // Überspringe '.' und '..'
        if ($file === '.' || $file === '..') {
            continue;
        }

        // Prüfe, ob es sich um eine Datei handelt
        if (is_file($filePath)) {
            // Datei-Änderungszeitstempel abrufen
            $fileModTime = filemtime($filePath);

            // Prüfen, ob die Datei älter als 24 Stunden ist
            if (($now - $fileModTime) > 86400) { // 86400 Sekunden = 24 Stunden
                // Datei löschen
                unlink($filePath);
                echo "Gelöscht: $filePath\n";
            }
        }
    }
}


/**
 * Prüft, ob der Benutzer eine Authentfizierung per E-Mail gemacht hat
 */
function check_mailreg() {
	global $pdo;
	
	if(isset($_SESSION['userid'])) {
		$statement = $pdo->prepare("SELECT id FROM intern_users WHERE id = :id AND mailreg = '1'");
		$statement->execute(array('id' => $_SESSION['userid']));
		$count = $statement->rowCount();
		
		if($count == 1){
			return true;
		}else{
			return false;
		}
	}else{
		return false;
	}


}

/**
 * Prüft, ob der Benutzer eine Authentfizierung per E-Mail gemacht hat
 */
function check_userdatenvorhanden() {
	global $pdo;
	
	if(isset($_SESSION['userid'])) {
		$statement = $pdo->prepare("SELECT id FROM intern_users WHERE id = :id AND tele <> '' AND strasse <> '' AND ort <> '' AND plz <> '' ");
		$statement->execute(array('id' => $_SESSION['userid']));
		$count = $statement->rowCount();
		
		if($count == 1){
			return true;
		}else{
			return false;
		}
	}else{
		return false;
	}


}


function is_checked_in_index() {
	if( isset($_SESSION['userid']) || isset($_COOKIE['identifier'])){
		return true;
	}else{
		return false;
	}
}	

function InfoAusgeloggtePerson(){
	$ausgabe = '
			<h1>Interner Bereich</h1>
			
			<p>Nach der Anmeldung können Sie Ihre Anfragen an <?php echo $organisationsname; ?> einsehen.<br>Bevor Sie sich anmelden können, müssen Sie sich registieren.<br><br></p>
			<p><a class="btn btn-primary btn-lg" href="login.php" role="button">Login</a></p><br><br>
			<p><a class="btn btn-primary btn-lg" href="register.php" role="button">Jetzt registrieren</a></p>
';
	return $ausgabe;
	
}

/**
 * Holt intern_users Datensatz per E-Mail, stellt sicher dass er in user existiert
 * und gibt user.userid zurück.
 *
 * Matching: user.mail = intern_users.email (case-insensitive)
 * Verhalten:
 * - wenn user nicht existiert: INSERT
 * - wenn user existiert: UPDATE (hier: überschreibt Felder mit intern_users Werten, wenn intern_users nicht leer ist)
 */
function ensureUserFromInternUsersByEmail(PDO $pdo, string $email): int
{
    $email = trim($email);
    if ($email === '') {
        throw new RuntimeException("E-Mail ist leer.");
    }

    // 1) intern_users laden
    $stmt = $pdo->prepare("
        SELECT vorname, nachname, email, geburtstag, tele, ort, plz, strasse
        FROM intern_users
        WHERE LOWER(email) = LOWER(:email)
        LIMIT 1
    ");
    $stmt->execute([':email' => $email]);
    $intern = $stmt->fetch(PDO::FETCH_ASSOC);

    if (!$intern) {
        throw new RuntimeException("Kein Eintrag in intern_users für E-Mail: " . $email);
    }

    $vorname    = trim((string)($intern['vorname'] ?? ''));
    $nachname   = trim((string)($intern['nachname'] ?? ''));
    $mail       = trim((string)($intern['email'] ?? ''));
    $geburtstag = trim((string)($intern['geburtstag'] ?? ''));
    $tele       = trim((string)($intern['tele'] ?? ''));
    $ort        = trim((string)($intern['ort'] ?? ''));
    $plz        = trim((string)($intern['plz'] ?? ''));
    $strasse    = trim((string)($intern['strasse'] ?? ''));

    // 2) existiert user bereits mit dieser Mail?
    $stmt = $pdo->prepare("
        SELECT person_id, vorname, nachname, geburtstag, email, tele, ort, plz, strasse
        FROM persons
        WHERE LOWER(email) = LOWER(:mail) AND geburtstag = :geburtstag
        LIMIT 1
    ");
    $stmt->execute([':mail' => $mail, ':geburtstag' => $geburtstag]);
    $existing = $stmt->fetch(PDO::FETCH_ASSOC);

    if (!$existing) {
        // 3) INSERT
        $ins = $pdo->prepare("
            INSERT INTO persons (vorname, nachname, geburtstag, email, tele, ort, plz, strasse)
            VALUES (:vorname, :nachname, :geburtstag, :mail, :tele, :ort, :plz, :strasse)
        ");
        $ins->execute([
            ':vorname'    => $vorname,
            ':nachname'   => $nachname,
            ':geburtstag' => $geburtstag,
            ':mail'       => $mail,
            ':tele'       => $tele,
            ':ort'        => $ort,
            ':plz'        => $plz,
            ':strasse'    => $strasse,
        ]);

        return (int)$pdo->lastInsertId();
    }

    // 4) UPDATE (nur wenn intern_users Wert nicht leer ist)
    //    -> du kannst das Verhalten ändern: "immer überschreiben" oder "nur leere Felder füllen".
    $userid = (int)$existing['person_id'];

    $upd = $pdo->prepare("
        UPDATE persons
        SET
            vorname    = COALESCE(NULLIF(:vorname, ''), vorname),
            nachname   = COALESCE(NULLIF(:nachname, ''), nachname),
            geburtstag = COALESCE(NULLIF(:geburtstag, ''), geburtstag),
            email       = COALESCE(NULLIF(:mail, ''), email),
            tele       = COALESCE(NULLIF(:tele, ''), tele),
            ort        = COALESCE(NULLIF(:ort, ''), ort),
            plz        = COALESCE(NULLIF(:plz, ''), plz),
            strasse    = COALESCE(NULLIF(:strasse, ''), strasse)
        WHERE person_id = :userid
    ");
    $upd->execute([
        ':vorname'    => $vorname,
        ':nachname'   => $nachname,
        ':geburtstag' => $geburtstag,
        ':mail'       => $mail,
        ':tele'       => $tele,
        ':ort'        => $ort,
        ':plz'        => $plz,
        ':strasse'    => $strasse,
        ':userid'     => $userid,
    ]);

    return $userid;
}

/**
 * Small helper for safe HTML output.
 */
function e(string $s): string {
	return htmlspecialchars($s, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
}

/**
 * Ensure a person exists in `persons` based on an intern user email.
 * Returns persons.person_id.
 *
 * Assumptions:
 * - `intern_users` has: vorname, nachname, email, geburtstag, tele, ort, plz, strasse
 * - `persons` has: person_id, vorname, nachname, email, geburtstag, tele, ort, plz, strasse
 *
 * If your schema differs, adjust column names inside INSERT/UPDATE.
 */
function ensurePersonFromInternUsersByEmail(PDO $pdo, string $email, ?int $internUserId = null): int
{
	$email = trim(mb_strtolower($email));
	if ($email === '') {
		throw new RuntimeException("E-Mail fehlt.");
	}

	// 1) load intern user data (prefer id, fallback email)
	if ($internUserId !== null && $internUserId > 0) {
		$stmtIU = $pdo->prepare("SELECT * FROM intern_users WHERE id = :id LIMIT 1");
		$stmtIU->execute([':id' => $internUserId]);
	} else {
		$stmtIU = $pdo->prepare("SELECT * FROM intern_users WHERE LOWER(email) = :email LIMIT 1");
		$stmtIU->execute([':email' => $email]);
	}
	$iu = $stmtIU->fetch(PDO::FETCH_ASSOC);
	if (!$iu) {
		throw new RuntimeException("Intern-User nicht gefunden (email/id).");
	}

	// normalize fields
	$vorname    = (string)($iu['vorname'] ?? '');
	$nachname   = (string)($iu['nachname'] ?? '');
	$geburtstag = (string)($iu['geburtstag'] ?? '');
	$tele       = (string)($iu['tele'] ?? '');
	$ort        = (string)($iu['ort'] ?? '');
	$plz        = (string)($iu['plz'] ?? '');
	$strasse    = (string)($iu['strasse'] ?? '');
	$emailRaw   = (string)($iu['email'] ?? $email);
	$emailNorm  = trim(mb_strtolower($emailRaw));

	$pdo->beginTransaction();
	try {
		// 2) try find person by email
		$stmtP = $pdo->prepare("SELECT person_id FROM persons WHERE LOWER(email) = :email LIMIT 1");
		$stmtP->execute([':email' => $emailNorm]);
		$personId = $stmtP->fetchColumn();

		if ($personId) {
			// optional: keep persons in sync (only fill missing fields)
			$stmtU = $pdo->prepare("
				UPDATE persons
				SET
					vorname    = COALESCE(NULLIF(vorname,''), :vorname),
					nachname   = COALESCE(NULLIF(nachname,''), :nachname),
					geburtstag = :geburtstag,
					tele       = COALESCE(NULLIF(tele,''), :tele),
					ort        = COALESCE(NULLIF(ort,''), :ort),
					plz        = COALESCE(NULLIF(plz,''), :plz),
					strasse    = COALESCE(NULLIF(strasse,''), :strasse)
				WHERE person_id = :pid
			");
			$stmtU->execute([
				':vorname' => $vorname,
				':nachname' => $nachname,
				':geburtstag' => $geburtstag,
				':tele' => $tele,
				':ort' => $ort,
				':plz' => $plz,
				':strasse' => $strasse,
				':pid' => (int)$personId,
			]);

			$pdo->commit();
			return (int)$personId;
		}

		// 3) insert new person
		$stmtI = $pdo->prepare("
			INSERT INTO persons (vorname, nachname, email, geburtstag, tele, ort, plz, strasse)
			VALUES (:vorname, :nachname, :email, :geburtstag, :tele, :ort, :plz, :strasse)
		");
		$stmtI->execute([
			':vorname' => $vorname,
			':nachname' => $nachname,
			':email' => $emailNorm,
			':geburtstag' => $geburtstag,
			':tele' => $tele,
			':ort' => $ort,
			':plz' => $plz,
			':strasse' => $strasse,
		]);

		$newId = (int)$pdo->lastInsertId();
		$pdo->commit();
		return $newId;

	} catch (Throwable $t) {
		$pdo->rollBack();
		throw $t;
	}
}

/**
 * Load selectable request topics.
 * $mode can be: rezept | allgemein | terminabsage
 */
function loadAnfragearten(PDO $pdo, string $mode): array
{
	$col = match ($mode) {
		'rezept' => 'rezept',
		'allgemein' => 'allgemeinanforderung',
		'terminabsage' => 'terminabsagen',
		default => throw new RuntimeException('Unbekannter Modus'),
	};

	$sql = "SELECT artid, artname FROM anfrageart WHERE {$col} = 1 ORDER BY artname";
	$stmt = $pdo->query($sql);
	return $stmt->fetchAll(PDO::FETCH_ASSOC);
}

/**
 * Load Anfrageart label by id
 */
function loadAnfrageartName(PDO $pdo, int $artid): string
{
	$stmt = $pdo->prepare("SELECT artname FROM anfrageart WHERE artid = :id LIMIT 1");
	$stmt->execute([':id' => $artid]);
	return (string)($stmt->fetchColumn() ?: '');
}

/**
 * Insert anfrage in a single place.
 * Returns new anfrageid.
 *
 * IMPORTANT: Adjust column names if your table differs:
 * - requester_person_id (preferred) OR personid (legacy)
 */
function insertAnfrage(PDO $pdo, array $data): int
{
	// Prefer new schema field name
	$hasRequester = true;
	try {
		$pdo->query("SELECT requester_person_id FROM anfragen LIMIT 0");
	} catch (Throwable $t) {
		$hasRequester = false;
	}

	$personField = $hasRequester ? 'requester_person_id' : 'personid';

	$sql = "
		INSERT INTO anfragen (
			{$personField},
			anforderungart,
			medikament1, medikament2, medikament3, medikament4, medikament5, medikament6,
			nachricht,
			hash,
			create_time,
			ordnungsid,
			abholort,
			sicherenachricht,
			checked
		) VALUES (
			:pid,
			:art,
			:m1, :m2, :m3, :m4, :m5, :m6,
			:nachricht,
			:hash,
			NOW(),
			:ordnungsid,
			:abholort,
			:sicherenachricht,
			:checked
		)
	";

	$stmt = $pdo->prepare($sql);
	$stmt->execute([
		':pid' => (int)$data['person_id'],
		':art' => (int)$data['anforderungart'],
		':m1' => (string)($data['med1'] ?? ''),
		':m2' => (string)($data['med2'] ?? ''),
		':m3' => (string)($data['med3'] ?? ''),
		':m4' => (string)($data['med4'] ?? ''),
		':m5' => (string)($data['med5'] ?? ''),
		':m6' => (string)($data['med6'] ?? ''),
		':nachricht' => (string)$data['nachricht'],
		':hash' => (string)$data['hash'],
		':ordnungsid' => (int)$data['ordnungsid'],
		':abholort' => (int)$data['abholort'],
		':sicherenachricht' => (int)$data['sicherenachricht'],
		':checked' => (int)$data['checked'],
	]);

	return (int)$pdo->lastInsertId();
}

/**
 * Check vacation / break.
 */
function isPraxisImUrlaub(PDO $pdo): bool
{
	$stmt = $pdo->prepare("SELECT 1 FROM urlaub WHERE start <= CURDATE() AND ende >= CURDATE() LIMIT 1");
	$stmt->execute();
	return (bool)$stmt->fetchColumn();
}

function loadAktuelleUrlaubsInfo(PDO $pdo): ?array
{
	$stmt = $pdo->prepare("
		SELECT ende, vertretung, vertretertelefon, vertreteradresse, vertreterurl
		FROM urlaub
		WHERE start <= CURDATE() AND ende >= CURDATE()
		ORDER BY ende DESC
		LIMIT 1
	");
	$stmt->execute();
	$row = $stmt->fetch(PDO::FETCH_ASSOC);
	return $row ?: null;
}


function SendMailMessageSilent($con, $empfaenger, $betreff, $body){

	// LOGIN CONFIG AUSLESEN
	$queryconfig = mysqli_query($con, "Select * FROM config");
	$rowconfig = mysqli_fetch_assoc($queryconfig);
	
	if($queryconfig->num_rows == 1){
		$row = mysqli_fetch_assoc($queryconfig);
		$userid = $row["mailserver"];
		echo $userid;
	}
	$mailserver = $rowconfig["mailserver"];
	$mailUsername = $rowconfig["mailUsername"];
	$mailPassword = $rowconfig["mailPassword"];
	$mailPort = $rowconfig["mailPort"];
	$mailFrom = $rowconfig["mailFrom"];
	$mailFromName = $rowconfig["mailFromName"];
	$mailSMTPSecure = $rowconfig["mailSMTPSecure"];
	
	
	$body = iconv('UTF-8', 'CP1252//IGNORE', $body);
	$betreff = iconv('UTF-8', 'CP1252//IGNORE', $betreff);
	//$mail = new PHPMailer(true);   	


	$mail = new PHPMailer(true); 
	try {
		//Server settings
		$mail->SMTPDebug = 0;                                 // Enable verbose debug output
		$mail->isSMTP();                                      // Set mailer to use SMTP
		$mail->Host = $mailserver;
		$mail->SMTPAuth = true;                               // Enable SMTP authentication

		$mail->Username = $mailUsername;
		$mail->Password = $mailPassword;
		$mail->SMTPSecure = $mailSMTPSecure;                            // Enable TLS encryption, `ssl` also accepted
                                // TCP port to connect to
		$mail->Port = $mailPort; 
		//Recipients
		$mail->setFrom($mailFrom , $mailFromName);

		$mail->addAddress($empfaenger);               // Name is optional

		//Content
		$mail->isHTML(true);                                  // Set email format to HTML
		$mail->Subject = $betreff;
		$mail->Body    = $body;
		$mail->AltBody = $body;
		//$mail->charSet = "UTF-8"; 
		//$mail->Encoding  = 'base64';
		
		$mail->send();
		
	} catch (Exception $e) {
		
	}

	

}
