
namespace _zeitbild.api
{
	
	/**
	 */
	export function register_calendar_get(
		rest_subject : lib_plankton.rest_caldav.type_rest
	) : void
	{
		register<
			null,
			{
				name : string;
				access : {
					default_level : string;
					attributed : Array<
						{
							user_id : int;
							level : string;
						}
					>
				};
				resource_id : int;
			}
		>(
			rest_subject,
			lib_plankton.http.enum_method.get,
			"/calendar/:calendar_id",
			{
				"description": "liest die Daten eines Kalenders aus",
				"output_schema": () => ({
					"nullable": true, // TODO
				}),
				"restriction": restriction_logged_in,
				"execution": async (stuff) => {
					const session : {key : string; value : lib_plankton.session.type_session;} = await session_from_stuff(stuff);
					const user_id : _zeitbild.type_user_id = await _zeitbild.service.user.identify(session.value.name);
					
					const calendar_id : _zeitbild.type_calendar_id = parseInt(stuff.path_parameters["calendar_id"]);
					const calendar_object : _zeitbild.type_calendar_object = await _zeitbild.service.calendar.get(
						calendar_id,
						user_id
					);
					const result = {
						"name": calendar_object.name,
						"access": {
							"public": calendar_object.access.public,
							"default_level": _zeitbild.api.access_level_encode(calendar_object.access.default_level),
							"attributed": lib_plankton.call.convey(
								calendar_object.access.attributed,
								[
									lib_plankton.map.dump,
									(pairs : Array<{key : _zeitbild.type_user_id; value : _zeitbild.enum_access_level;}>) => (
										pairs
										.map(
											(pair : {key : _zeitbild.type_user_id; value : _zeitbild.enum_access_level;}) => ({
												"user_id": pair.key,
												"level": _zeitbild.api.access_level_encode(pair.value)
											})
										)
									)
								]
							),
						},
						"resource_id": calendar_object.resource_id,
					};
					return Promise.resolve(
						{
							"status_code": 200,
							"data": result,
						}
					);
				}
			}
		);
	}
	
}
