/*
 * Verrückte Turing-Maschinen — A turing complete game
 * Copyright (C) 2016-2018 kcf <vidofnir@folksprak.org>
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

namespace mod_vtm
	{
		
		export namespace mod_manifestation
			{
				
				export namespace mod_svg
					{
						
						export namespace mod_actuator
							{
								
								/**
								 * @author kcf <vidofnir@folksprak.org>
								 */
								lib_trait.attend
									(
										trait_actuator,
										"reader",
										{
											"view": ({"data": {"direction": direction, "symbol_links": symbol_links, "symbol_rechts": symbol_rechts}}) =>
												{
													let children : Array<lib_xml.type_node> = [];
													type type_entry =
														{
															summand : mod_vtm.mod_model.mod_direction.type_direction;
															symbol : lib_errormonade.type_errormonade<mod_vtm.mod_model.mod_symbol.type_symbol>;
														}
													;
													let ausgaenge : Array<type_entry> =
														[
															{
																"summand": 0,
																"symbol": lib_errormonade.create_nothing<mod_vtm.mod_model.mod_symbol.type_symbol>(),
															},
															{
																"summand": +2,
																"symbol": lib_errormonade.create_just<mod_vtm.mod_model.mod_symbol.type_symbol>(symbol_links),
															},
															{
																"summand": -2,
																"symbol": lib_errormonade.create_just<mod_vtm.mod_model.mod_symbol.type_symbol>(symbol_rechts),
															},
														]
													;
													ausgaenge.forEach
														(
															entry =>
																{
																	let anglestaerke : float = (mod_vtm.mod_model.mod_direction.add(direction, entry.summand) / 6);
																	let node_arrow : lib_xml.type_node = (
																		lib_xml.create_normal
																			(
																				"path",
																				{
																					"d": shape_arrow_2,
																					"class": (
																						[
																							"arrow",
																							(
																								lib_errormonade.filled<mod_model.mod_symbol.type_symbol>(entry.symbol)
																								? "symbol_" + lib_errormonade.read<mod_model.mod_symbol.type_symbol>(entry.symbol).toFixed(0)
																								: "neutral"
																							),
																						].join(" ")
																					),
																					"transform": (
																						[
																							lib_svg.rotation(anglestaerke),
																							lib_svg.translation(+0.1, 0),
																							lib_svg.scaling(0.075),
																						].join(" ")
																					),
																				}
																			)
																	);
																	children.push(node_arrow);
																}
														)
													;
													return children;
												}
											,
										}
									)
								;
								
							}
						
					}
				
			}
		
	}

