# See: http://wiki.flightgear.org/MapStructure
# Class things:
var name = 'WPT-airbus';
var parents = [canvas.DotSym];
var __self__ = caller(0)[0];
canvas.DotSym.makeinstance( name, __self__ );

var element_type = "group";

var init = func {
	var name = me.model.name;
	var alt = me.model.alt;
	var spd = me.model.spd;
	var wp_group = me.element;
	me.alt_path = nil;

	var colors = [
		'wp_color',
		'current_wp_color',
		'constraint_color',
		'active_constraint_color',
		'missed_constraint_color'
	];
	foreach(col; colors){
		me[col] = me.getStyle(col, me.getOption(col));
	}

	var idLen = size(me.model.id);
	var draw_sym = nil;
	var navtype = me.model.navtype;
	if (navtype == nil) navtype = 'fix';
	if(navtype == 'airport')
		draw_sym = me.options.airport_symbol;
	elsif(navtype == 'vor')
		draw_sym = me.options.vor_symbol;
	elsif(navtype == 'ndb')
		draw_sym = me.options.ndb_symbol;
	else
		draw_sym = me.options.fix_symbol;
	me.wp_sym = me.element.createChild('group', 'wp-'~ me.model.idx);
	if(typeof(draw_sym) == 'func')
		draw_sym(me.wp_sym);
	elsif(typeof(draw_sym) == 'scalar')
		canvas.parsesvg(me.wp_sym, draw_sym);
	var translation = me.getStyle('translation', {});
	if(contains(translation, navtype)){
		me.wp_sym.setTranslation(translation[navtype]);
	}
	me.text_wps = wp_group.createChild("text", "wp-text-" ~ me.model.idx)
	.setDrawMode( canvas.Text.TEXT )
	.setText(me.model.name)
	.setFont("LiberationFonts/LiberationSans-Regular.ttf")
	.setFontSize(28)
	.setTranslation(25,15)
	.setColor(1,1,1);
	me.text_alt = nil;
	if(alt > 0 or spd > 0){
		var cstr_txt = "\n";
		if(alt > 0){
			if(alt > 10000) 
				cstr_txt ~= sprintf('FL%3d', int(alt / 100));
			else 
				cstr_txt ~= sprintf('%4d', int(alt));
		}
		if(spd > 0){
			if(alt > 0) cstr_txt ~= "\n";
			if(spd <= 1) 
				cstr_txt ~= sprintf('%4.2fM', spd);
			else 
				cstr_txt ~= sprintf('%3dKT', int(spd));
		}
		me.text_alt = wp_group.createChild("text", "wp-alt-text-" ~ me.model.idx)
		.setDrawMode( canvas.Text.TEXT )
		.setText(cstr_txt)
		.setFont("LiberationFonts/LiberationSans-Regular.ttf")
		.setFontSize(28)
		.setTranslation(25,15);
	}
}

var draw = func{
	var wp_group = me.element;
	var alt = me.model.alt;
	var i = me.model.idx;
	var vnav_actv = getprop(me.options.ver_ctrl) == me.options.managed_val;
	var curwp = getprop(me.options.current_wp);
	if(alt > 0){
		var wp_d = me.model.wp.distance_along_route;
		var lvl_off_at = getprop(me.options.level_off_alt);
		if(lvl_off_at == nil) lvl_off_at = 0;
		if(me.alt_path == nil){
			me.alt_path = wp_group.createChild("path").
			setStrokeLineWidth(4).
			moveTo(-22,0).
			arcSmallCW(22,22,0,44,0).
			arcSmallCW(22,22,0,-44,0);
		}
		if(vnav_actv){
			if(lvl_off_at and (lvl_off_at - wp_d) > 0.5 and curwp == i)
				me.alt_path.setColor(me.missed_constraint_color);
			else
				me.alt_path.setColor(me.active_constraint_color);
		}
		else
			me.alt_path.setColor(me.constraint_color);
		if(me.layer.toggle_cstr)
			me.alt_path.show();
		else
			me.alt_path.hide();
	} else {
		if(me.alt_path != nil) me.alt_path.hide();
	}
	wp_group.set("z-index",4);
	#var sym = me.element.getElementById('wp-' ~ me.model.idx);
	if(alt > 0 and me.text_alt != nil){
		if(vnav_actv)
			me.text_alt.setColor(me.active_constraint_color);
		else
			me.text_alt.setColor(me.constraint_color);
	}
	if(i == curwp) {
		me.wp_sym.setColor(me.current_wp_color);
		me.text_wps.setColor(me.current_wp_color);
	} else {
		me.wp_sym.setColor(me.wp_color);
		me.text_wps.setColor(me.wp_color);
	}
	if(me.model.is_departure or me.model.is_destination){
		var prop = (me.model.is_departure ? 'departure' : 'destination');
		var rwy = getprop("/autopilot/route-manager/"~prop~"/runway");
		if(rwy != nil and size(rwy) > 0){
			me.wp_sym.hide();
		} else {
			me.wp_sym.show();
		}
	}
}