% my $api_root = $self->url_for('/api/v1')->to_abs->scheme('https');
% my $token = {};
% my $uid;
% if (is_user_authenticated()) {
	% $uid = current_user()->{id};
	% $token = get_api_token();
% }

<h1>API</h1>

<div class="row">
	<div class="col s12">
		Die folgenden API-Endpunkte werden aktuell unterstützt.
	</div>
</div>

<h2>Status</h2>
<div class="row">
	<div class="col s12">
		<p style="font-family: Monospace;">
			% if ($token->{status}) {
				curl <%= $api_root %>/status/<%= $uid %>-<%= $token->{status} // 'TOKEN' %>
			% }
			% else {
				curl <%= $api_root %>/status/TOKEN
			% }
		</p>
		<p>
		Beispiel / Layout:
		</p>
		<p style="font-family: Monospace;">
		{<br/>
			"deprecated" : true / false, (falls true: Diese API-Version wird irgendwann abgeschaltet, bitte auf eine neue umsteigen)<br/>
			"checkedIn" : true / false,<br/>
			"fromStation" : { (letzter Checkin)<br/>
				"name" : "Essen Hbf",<br/>
				"ds100" : "EE",<br/>
				"uic" : 8000098,<br/>
				"latitude" : 51.451355,<br/>
				"longitude" : 7.014793,<br/>
				"scheduledTime": 1556083680,<br/>
				"realTime": 1556083680,<br/>
			},<br/>
			"toStation" : { (zugehöriger Checkout. Wenn noch nicht eingetragen, sind alle Felder null)<br/>
				"name" : "Essen Stadtwald",<br/>
				"ds100" : "EESA",<br/>
				"uic" : 8001896,<br/>
				"latitude" : 51.422853,<br/>
				"longitude" : 7.023296,<br/>
				"scheduledTime": 1556083980, (ggf. null)<br/>
				"realTime": 1556083980, (ggf. null)<br/>
			},<br/>
			"train" : {<br/>
			"type" : "S", (aktueller / letzter Zugtyp)<br/>
			"line" : "6", (Linie als String, nicht immer numerisch, ggf. null)<br/>
			"no" : "30634", (Zugnummer als String)<br/>
			"id" : "7512500863736016593", (IRIS-spezifische Zug-ID)<br/>
			},<br/>
			"actionTime" : 1234567, (UNIX-Timestamp des letzten Checkin/Checkout)<br/>
		}
		</p>
		<p>
			Im Fehlerfall: <span style="font-family: Monospace;">{ "error" : "Begründung" }</span>
		</p>
	</div>
</div>

<h2>Travel</h2>
<div class="row">
	<div class="col s12">
		<p>
			Checkin per API. Sobald eine Zielstation bekannt ist, erfolgt der
			Checkout wie beim Webinterface automatisch zehn Minuten nach Ankunft.
		</p>
		<p style="font-family: Monospace;">
			curl -X POST -H "Content-Type: application/json" -d '{"token":"<%= $uid %>-<%= $token->{travel} // 'TOKEN' %>"}' <%= $api_root %>/travel
		</p>
		<p>Payload zum Einchecken, optional mit Zielwahl:</p>
		<p style="font-family: Monospace;">
		{<br/>
			"token" : "<%= $uid %>-<%= $token->{import} // 'TOKEN' %>",<br/>
			"action" : "checkin",<br/>
			"train" : {<br/>
				"type" : "ICE",<br/>
				"no" : "1234",<br/>
			}<br/>
			"fromStation" : "Essen Hbf", (DS100 oder EVA-Nummer sind ebenfalls möglich)<br/>
			"toStation" : "Berlin Hbf", (optional, DS100 oder EVA-Nummer sind ebenfalls möglich)<br/>
			"comment" : "Beliebiger Text" (optional)<br/>
		}
		</p>
		<p>Payload zur Wahl eines neuen Ziels, wenn bereits eingecheckt:</p>
		<p style="font-family: Monospace;">
		{<br/>
			"token" : "<%= $uid %>-<%= $token->{import} // 'TOKEN' %>",<br/>
			"action" : "checkout",<br/>
			"force" : True/False, (wenn True: Checkout jetzt durchführen und auftretende Fehler ignorieren. Kann zu Logeinträgen ohne Ankunftsdaten führen.)<br/>
			"toStation" : "Berlin Hbf", (DS100 oder EVA-Nummer sind ebenfalls möglich)<br/>
			"comment" : "Beliebiger Text" (optional)<br/>
		}
		</p>
		<p>Payload zum Rückgängigmachen eines Checkins (nur während der Fahrt möglich):</p>
		<p style="font-family: Monospace;">
		{<br/>
			"token" : "<%= $uid %>-<%= $token->{import} // 'TOKEN' %>",<br/>
			"action" : "undo"<br/>
		}
		</p>
		<p>
			Antwort bei Erfolg:
		</p>
		<p style="font-family: Monospace;">
		{<br/>
			"success" : True,<br/>
			"status" : { aktueller Nutzerstatus gemäß Status-API }<br/>
		}
		</p>
		<p>
			Antwort bei Fehler:
		</p>
		<p style="font-family: Monospace;">
		{<br/>
			"success" : False,<br/>
			"error" : "Begründung",<br/>
			"status" : { aktueller Nutzerstatus gemäß Status-API }<br/>
		}
		</p>
	</div>
</div>

<h2>Import</h2>
<div class="row">
	<div class="col s12">
		<p>
			Manueller Import vergangener Zugfahrten (eine Fahrt pro API-Aufruf).
		</p>
		<p style="font-family: Monospace;">
			curl -X POST -H "Content-Type: application/json" -d '{"token":"<%= $uid %>-<%= $token->{status} // 'TOKEN' %>"}' <%= $api_root %>/import
		</p>
		<p>Payload (alle nicht als optional markierten Felder sind Pflicht):</p>
		<p style="font-family: Monospace;">
		{<br/>
			"token" : "<%= $uid %>-<%= $token->{import} // 'TOKEN' %>",<br/>
			"dryRun" : True/False, (optional: wenn True, wird die Eingabe validiert, aber keine Zugfahrt angelegt)<br/>
			"cancelled" : True/False, (Zugausfall?)<br/>
			"train" : {<br/>
			"type" : "S", (Zugtyp, z.B. ICE, RE, S)<br/>
			"line" : "6", (Linie als String, bei Zügen ohne Linie wie IC/ICE u.ä. null)<br/>
			"no" : "30634", (Zugnummer als String)<br/>
			},<br/>
			"fromStation" : { (Start / Checkin)<br/>
			"name" : "Essen Hbf", (Name oder DS100)<br/>
			"scheduledTime": 1556083680, (UNIX-Timestamp)<br/>
			"realTime": 1556083680, (UNIX-Timestamp, optional, default == scheduledTime)<br/>
			},<br/>
			"toStation" : { (Ziel / Checkout)<br/>
				"name" : "Essen Stadtwald", (Name oder DS100)<br/>
				"scheduledTime": 1556083980, (UNIX-Timestamp)<br/>
				"realTime": 1556083980, (UNIX-Timestamp, optional, default == scheduledTime)<br/>
			},<br/>
			"route" : [ (optionale Liste mit Unterwegshalten als Name oder DS100, darf keine Stationen vor Checkin oder nach Checkout beinhalten)<br/>
				"Essen Hbf",<br/>
				"Essen Süd",<br/>
				"Essen Stadtwald"<br/>
			],<br/>
			"comment" : "Beliebiger Text" (optionaler Freitext-Kommentar)<br/>
		}
		</p>
		<p>
			Antwort bei Erfolg (der Inhalt von "result" ist von dryRun unabhängig):
		</p>
		<p style="font-family: Monospace;">
		{<br/>
			"success" : True,<br/>
			"id" : 1234, (ID der eingetragenen Zugfahrt)<br/>
			"result" : { ... } (Eingetragene Daten, Inhalt ist variabel)<br/>
		}
		</p>
		<p>
			Antwort bei Fehler:
		</p>
		<p style="font-family: Monospace;">
		{<br/>
			"success" : False,<br/>
			"error" : "Begründung"<br/>
		}
		</p>
	</div>
</div>