<!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>
		<?php

		include('header.php');

?>
		<title>Praxis Creutzburg - DateiUpload</title>
		<link rel="stylesheet" href="css/formulare.css" />
	</head>
	<body >

		<!-- Header -->
		<header id="header" class="../skel-layers-fixed">
				

	<?php

    include('menu.php');
	include_once("inc/config.inc.php");
	include_once("inc/functions.inc.php");
	include_once('inc/functions.impfen.inc.php');
	include_once('inc/functions.formulare.inc.php');
	
?>			
	</header>
			
			
		<!-- Main -->
			<section id="main" class="container">
						<?php 
			echo showHeaderpraxis();
		?>

		
				
		<section class="box special">
			<h2>PDF-Datei Upload</h2>

<?php

if(isset($_POST["aktion"])){

	if($_POST["aktion"] == "1"){

 		$vorname    = trim($_POST["Vorname"] ?? "");
		$nachname   = trim($_POST["Name"] ?? "");
		$geburtstag = trim($_POST["Geburtsjahr"] ?? "");  // sollte YYYY-MM-DD sein
		$email      = trim($_POST["Email"] ?? "");
		$tele       = trim($_POST["Tel"] ?? "");
		$plz        = trim($_POST["plz"] ?? "");
		$ort        = trim($_POST["ort"] ?? "");
		$strasse    = trim($_POST["strasse"] ?? "");

		$nachricht = trim($_POST["message"] ?? "");
		$anforderungart = '18';

		// Optional: wenn nur Jahr kommt -> YYYY-01-01
		#if (preg_match('/^\d{4}$/', $geburtstag)) {
		#	$geburtstag = $geburtstag . "-01-01";
		#}

		// Minimal-Validation (empfohlen)
		if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
			die("Fehler: Ungültige E-Mail");
		}
		if (!$geburtstag) {
			die("Fehler: Geburtsdatum fehlt");
		}

		$hashvorher = $vorname . $nachname . $email;
		$hash = md5($hashvorher) . date("YmdHs");

		try {
			// Transaktion starten
			$pdo->beginTransaction();

			// persons Upsert (UNIQUE(email, geburtstag) vorausgesetzt)
			$stmt = $pdo->prepare("
				INSERT INTO persons (vorname, nachname, email, geburtstag, tele, ort, plz, strasse)
				VALUES (:vorname, :nachname, :email, :geburtstag, :tele, :ort, :plz, :strasse)
				ON DUPLICATE KEY UPDATE
					vorname = VALUES(vorname),
					nachname = VALUES(nachname),
					tele = VALUES(tele),
					ort = VALUES(ort),
					plz = VALUES(plz),
					strasse = VALUES(strasse),
					updated_at = CURRENT_TIMESTAMP
			");
			$stmt->execute([
				':vorname'    => $vorname,
				':nachname'   => $nachname,
				':email'      => $email,
				':geburtstag' => $geburtstag,
				':tele'       => $tele,
				':ort'        => $ort,
				':plz'        => $plz,
				':strasse'    => $strasse,
			]);

			// person_id holen (zuverlässig nach Upsert)
			$stmt = $pdo->prepare("SELECT person_id FROM persons WHERE email = ? AND geburtstag = ? LIMIT 1");
			$stmt->execute([$email, $geburtstag]);
			$person_id = (int)$stmt->fetchColumn();

			if (!$person_id) {
				throw new Exception("Konnte person_id nicht ermitteln");
			}

			// Transaktion abschließen
			$pdo->commit();

			 //echo "Operation erfolgreich. person_id: " . $person_id;

		} catch (Exception $e) {
			// Rollback bei Fehlern
			if ($pdo->inTransaction()) {
				$pdo->rollBack();
			}
			die("Fehler: " . $e->getMessage());
		}

		
		// Überprüfung: Wurde eine Datei hochgeladen?
		if (isset($_FILES['pdfFile']) && $_FILES['pdfFile']['error'] === UPLOAD_ERR_OK) {
			$uploadDir = 'upload/nexChRvmgyJWCgvWjceFugXpGFQzBBaMtuZlySuFdYkFzYoxNe/';
			
			// Datei-Infos
			$fileTmpPath = $_FILES['pdfFile']['tmp_name'];
			$fileName = $_FILES['pdfFile']['name'];
			$fileSize = $_FILES['pdfFile']['size'];
			$fileType = $_FILES['pdfFile']['type'];
			
			// Sicherheitsüberprüfung (nur PDF erlauben)
			$allowedMimeTypes = ['application/pdf'];
			if (!in_array($fileType, $allowedMimeTypes)) {
				die('Nur PDF-Dateien sind erlaubt!');
			}
			
			// Dateiname generieren (Nachname, Datum, Originalname)
			#$nachname = "BeispielNachname"; // Ersetzen durch den tatsächlichen Wert
			$date = date('Y-m-d-H-i');
			$safeFileName = $nachname . '_' . $date . '_' . basename($fileName);
			
			// Datei speichern
			$destPath = $uploadDir . $safeFileName;
			if (!move_uploaded_file($fileTmpPath, $destPath)) {
				die('Fehler beim Hochladen der Datei.');
			}
			// Berechtigungen auf lesbar setzen (z. B. 0644 für Besitzer lesen/schreiben und andere lesen)
			if (!chmod($destPath, 0644)) {
				die('Fehler beim Setzen der Dateiberechtigungen.');
			}
			
			$stmt = $pdo->prepare("
				INSERT INTO anfragen
				  (requester_person_id, anforderungart, nachricht, create_time, hash, ordnungsid, dateiname,
				   sicherenachricht, source, created_by_account_id)
				VALUES
				  (:person_id, :anforderungart, :nachricht, NOW(), :hash, :ordnungsid, :dateiname,
				   0, 'mail', NULL)
			");

			$stmt->execute([
				':person_id'      => $person_id,        // aus persons
				':anforderungart' => $anforderungart,
				':nachricht'      => $nachricht,
				':hash'           => $hash,
				':ordnungsid'     => 2,
				':dateiname'      => $safeFileName
			]);

			$anfrageid = (int)$pdo->lastInsertId();
			SendMailMessageVorlage($pdo, "3", $anfrageid , "25" );
			
			echo "<h3>Datei erfolgreich hochgeladen und gespeichert!</h3><br>Sie bekommen eine Bestätigung per E-Mail!<br>Überprüfen Sie auch Ihren Spam-Filter!<br><br>	";
			
		} else {
			echo "<h3>Bitte laden Sie eine gültige Datei hoch.</h3><br><br>	";
			
		}


	}else if($_POST["aktion"] == "2"){

		
		// ---------- 1) Eingaben ----------
		$vorname    = trim($_POST["Vorname"] ?? "");
		$nachname   = trim($_POST["Name"] ?? "");
		$geburtstag = trim($_POST["Geburtsjahr"] ?? "");   // sollte DATE sein (YYYY-MM-DD) – ggf. nur Jahr
		$email      = trim($_POST["Email"] ?? "");
		$tele       = trim($_POST["Tel"] ?? "");
		$plz        = trim($_POST["plz"] ?? "");
		$ort        = trim($_POST["ort"] ?? "");
		$strasse    = trim($_POST["strasse"] ?? "");

		$medikament1 = trim($_POST["Medikament1"] ?? "");
		$medikament2 = trim($_POST["Medikament2"] ?? "");
		$nachricht   = trim($_POST["message"] ?? "");
		$anforderungart = trim($_POST["category"] ?? "");

		// Geburtstag: falls nur Jahr kommt -> YYYY-01-01
		if (preg_match('/^\d{4}$/', $geburtstag)) {
			$geburtstag = $geburtstag . "-01-01";
		}

		// Minimal-Validation
		if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
			die("<h3>Ungültige E-Mail</h3>");
		}
		if (!$geburtstag) {
			die("<h3>Geburtsdatum fehlt</h3>");
		}
		if ($anforderungart === "") {
			die("<h3>Kategorie fehlt</h3>");
		}

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

		// ---------- 3) Transaktion: Person upsert + Duplikatcheck + Anfrage insert ----------
		try {
			$pdo->beginTransaction();

			// 3a) Person upsert (UNIQUE(email, geburtstag) vorausgesetzt!)
			$stmt = $pdo->prepare("
				INSERT INTO persons (vorname, nachname, email, geburtstag, tele, ort, plz, strasse)
				VALUES (:vorname, :nachname, :email, :geburtstag, :tele, :ort, :plz, :strasse)
				ON DUPLICATE KEY UPDATE
					vorname = VALUES(vorname),
					nachname = VALUES(nachname),
					tele = VALUES(tele),
					ort = VALUES(ort),
					plz = VALUES(plz),
					strasse = VALUES(strasse),
					updated_at = CURRENT_TIMESTAMP
			");
			$stmt->execute([
				':vorname'    => $vorname,
				':nachname'   => $nachname,
				':email'      => $email,
				':geburtstag' => $geburtstag,
				':tele'       => $tele,
				':ort'        => $ort,
				':plz'        => $plz,
				':strasse'    => $strasse,
			]);

			// person_id holen
			$stmt = $pdo->prepare("SELECT person_id FROM persons WHERE email = ? AND geburtstag = ? LIMIT 1");
			$stmt->execute([$email, $geburtstag]);
			$person_id = (int)$stmt->fetchColumn();

			if (!$person_id) {
				throw new Exception("Keine eindeutige Kennung (person_id).");
			}

			// 3b) Hash erzeugen
			$hashvorher = $vorname . $nachname . $email;
			$hash = md5($hashvorher) . date("YmdHs");

			// 3c) Duplikatcheck (letzte 7 Tage)
			$stmt = $pdo->prepare("
				SELECT 1
				FROM anfragen
				WHERE requester_person_id = ?
				  AND anforderungart = ?
				  AND nachricht = ?
				  AND create_time >= (NOW() - INTERVAL 7 DAY)
				LIMIT 1
			");
			$stmt->execute([$person_id, $anforderungart, $nachricht]);
			$exists = (bool)$stmt->fetchColumn();

			if ($exists) {
				$pdo->rollBack();
				echo "<h3>Doppelte Anfrage</h3><br>Ihre Anfrage wurde schon in unserem System gespeichert.<br>Sie haben die identische Anfrage schon in den letzten sieben Tagen eingereicht.<br>Bitte warten Sie auf die Verarbeitung Ihrer Anfrage.<br><br>";
				header("refresh:15;formulare.php");
				exit;
			}

			// 3d) Anfrage anlegen (ohne Accounts)
			$stmt = $pdo->prepare("
				INSERT INTO anfragen
				  (requester_person_id, anforderungart, medikament1, medikament2, nachricht,
				   create_time, hash, ordnungsid, sicherenachricht, source, created_by_account_id)
				VALUES
				  (:person_id, :anforderungart, :med1, :med2, :nachricht,
				   NOW(), :hash, 2, 0, 'mail', NULL)
			");
			$stmt->execute([
				':person_id'      => $person_id,
				':anforderungart' => $anforderungart,
				':med1'           => $medikament1,
				':med2'           => $medikament2,
				':nachricht'      => $nachricht,
				':hash'           => $hash
			]);

			$anfrageid = (int)$pdo->lastInsertId();

			$pdo->commit();

		} catch (Exception $e) {
			if ($pdo->inTransaction()) {
				$pdo->rollBack();
			}
			die("<h3>Speicherung nicht erfolgreich</h3><br>" . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8'));
		}

		// ---------- 4) Mail senden + Ausgabe ----------
		try {
			// Jetzt PDO übergeben
			SendMailMessageVorlage($pdo, "3", $anfrageid, "25");
		} catch (Exception $e) {
			// Mailfehler soll nicht zwingend den DB-Insert rückgängig machen
			// Optional: Logging
		}

		echo "<h3>Nachricht abgeschickt!</h3><br>Sie bekommen eine Bestätigung per E-Mail!<br>Überprüfen Sie auch Ihren Spam-Filter!<br><br>";
		header("refresh:15;formulare.php");
		exit;



	}
}else{

	
?>									
					
					
					
					Über diese Seite können Sie PDF-Dateien unserem Praxis-Team bereitstellen.<br>
					Sie können über dieses Formular aus Sicherheitsgründen ausschließlich PDF-Dokumente hochladen.<br>
					Sollten Sie anderen Dokumente hochladen wollen, dann wandeln Sie diese Dokumente zu erst in ein PDF um.<br><br>
					Die Übertragung an die Praxisanwendung erfolgt per HTTPS und einer TLS-verschlüsselten Verbindung.<br>
				
				
				</header>
				
				<div class="row">
					<div class="12u">
						
						<!-- Form -->
							<section class="box">
							<?php
							
							// Urlaubsabfrage
							$today = date("Y-m-d");

							$stmt = $pdo->prepare("
								SELECT urlaubid
								FROM urlaub
								WHERE start <= ?
								  AND ende  >= ?
								LIMIT 1
							");
							$stmt->execute([$today, $today]);

							$urlaubid = $stmt->fetchColumn();

							if (!$urlaubid) {						
							?>
							
						
							<h3>Formular bitte ausfüllen und abschicken</h3>
						
								
							<?php echo '<form action="'. $_SERVER['PHP_SELF'] .'" method=POST enctype="multipart/form-data" >';
							echo '<input type="hidden" name="aktion" id="aktion" value="1" />';
							
							
							?>

										
									
									
									<div class="row uniform 50%">
										<?php
										echo ShowFormularFragenBenutzer();
										?>
										
										<div class="12u">	
											<label for="category">Ich habe eine Anfrage für folgendes Thema:</label>
											<div class="select-wrapper">
												<select name="category" id="category" disabled  >
												
												<?php
												$stmt = $pdo->prepare("
													SELECT artid, artname 
													FROM anfrageart 
													WHERE dateiupload = 1
												");
												$stmt->execute();

												while ($rowimpf = $stmt->fetch(PDO::FETCH_ASSOC)) {
													$artname = $rowimpf["artname"];
													$artid   = $rowimpf["artid"];
													?>
													<option value="<?php echo htmlspecialchars($artid, ENT_QUOTES, 'UTF-8'); ?>">
														<?php echo htmlspecialchars($artname, ENT_QUOTES, 'UTF-8'); ?>
													</option>
													<?php
												}
												?>
													
													
												</select>
												
												<div id="AstraInfobox"></div>
											</div>
										</div>

									
										<div class="12u">
											<label for="pdfFile">PDF-Datei hochladen:</label>
											<input type="file" name="pdfFile" id="pdfFile" accept="application/pdf" required>
										</div>
										
									
																
										
										<div class="12u">
											<textarea name="message" id="message" placeholder="Ihre Nachricht/Bemerkung" rows="6"  maxlength="150"></textarea>
										</div>
									
										<div class="12u">
												<br>
											
											Ihre Daten werden HTTPS-verschlüsselt an unser System übertragen. Sie erhalten die Antwort per E-Mail mit TLS-Verschlüsselung. Mit Absenden Ihrer Anfrage stimmen Sie diesen Bedingungen zu.<br>
										<br>
											<ul class="actions">
												<li><input type="submit" value="Abschicken" /></li>
												
											</ul>
										</div>


									</div>
										
									
						
										
										
										
									</div>
								</form>
							
								<hr />
<?php 						}else{
								echo "<h2>Praxis im Urlaub</h2>";
								echo "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>";

								$today = date("Y-m-d");

								$stmt = $pdo->prepare("
									SELECT ende, vertretung, vertretertelefon, vertreteradresse, vertreterurl
									FROM urlaub
									WHERE start <= :today
									  AND ende  >= :today
									ORDER BY ende DESC
									LIMIT 1
								");
								$stmt->execute([':today' => $today]);

								$row = $stmt->fetch(); // liefert Array oder false

								if ($row) {
									$vertreter        = $row["vertretung"] ?? null;
									$vertretertelefon = $row["vertretertelefon"] ?? null;
									$vertreteradresse = $row["vertreteradresse"] ?? null;
									$vertreterurl     = $row["vertreterurl"] ?? null;
									$ende             = $row["ende"] ?? null;

									if ($ende) {
										$endeausgabe = date("d.m.Y", strtotime("+1 day", strtotime($ende)));
									} else {
										$endeausgabe = null;
									}

									if (!empty($vertreter)) {
										echo "Unsere Vertretung: " . htmlspecialchars($vertreter, ENT_QUOTES, 'UTF-8') . "<br>";
									}
									if (!empty($vertreterurl)) {
										// optional: URL escapen/validieren
										echo "Webseite Vertretung: " . htmlspecialchars($vertreterurl, ENT_QUOTES, 'UTF-8') . "<br>";
									}
									if (!empty($vertretertelefon)) {
										echo "Telefonischer Kontakt Vertretung: " . htmlspecialchars($vertretertelefon, ENT_QUOTES, 'UTF-8') . "<br>";
									}
									if (!empty($vertreteradresse)) {
										echo "Adresse Vertretung: " . htmlspecialchars($vertreteradresse, ENT_QUOTES, 'UTF-8') . "<br>";
									}

									if ($endeausgabe) {
										echo "<br>Wir stehen Ihnen ab dem " . htmlspecialchars($endeausgabe, ENT_QUOTES, 'UTF-8') . " wieder zur Verfügung.<br><br><br>";
									}
								}
								?>
								<form action="index.php" method=POST>
								<input type=submit class=button value="Zurück">
								</form>
								<?php
							}
}
?>	
							
					</div>
				</div>
			</section>
		<?php

    include_once('footer.php');

?>
				
		

	</body>
</html>