<% 
import sys, copy
import py_cmdtabs.cli_manager as cli_manager 

def show_n_exec(table_name, args, meth, skip_input=False, out='std', supp_tables=[]):
	results = plotter.renderize_child_template(plotter.get_internal_template('show_n_exec'), 
				table_name=table_name, out_type= out, args=args, library=cli_manager, 
				method=meth, skip_input=skip_input, supp_tables = supp_tables
			)
	return results

def create_tool_section(tool_name, title_id, container_id):
	title = plotter.create_title(tool_name, id=title_id, hlevel=2, css_class='dummy', indexable=True, clickable=True, t_id=container_id, clickable_text = '(Click me)')	
	content = plotter.renderize_child_template(plotter.get_internal_template(tool_name), show_n_exec = show_n_exec )
	container = plotter.create_collapsable_container(container_id, content, display="visible")
	return f'{title}\n{container}\n'

%>

<div style="width: 95%; padding:20px;">
	<% plotter.set_header() %>
	<h1> Operation with tables </h1>

		<h2> Pautas generales </h2>
			<p>Aunque se explicarán más en detalle en cada sección del binario correspondiente, existen una serie de pautas generales que funcionan para una gran mayoría de los comandos.</p>
			<p>Para los binarios a los que se les pase algún flag de tabla de entrada (en la mayoría de casos con el flag -i, 
			pero en otros casos como en 'intersect_columns' con los flags -a y -b), dichas tablas pueden venir en formato de texto plano, 
			pero también se pueden cargar comprimidas en gzip utilizando el flag '--compressed_in'. Por ejemplo:</p>

			<div class='code'>
				desaggregate_column_data -i patients_and_phens.gz -x 2 --compressed_in -o desaggregated.txt
			</div>

			<p> Además, para aquellos comandos que solo necesiten una tabla de entrada (como 'aggregate_column_data', 'desaggregate_column_data' o 'transpose_table',
			pero no 'intersect_columns'), se puede utilizar un guión '-' con el flag de input para indicar que el contenido de la tabla proviene por stdout (por ejemplo fruto de un pipe de un
			comando anterior), pudiendo venir también comprimido. Por ejemplo: </p>

			<div class='code'>
				cat patients_and_phens.txt | script_que_devuelve_datos_comprimidos | desaggregate_column_data -i - -x 2 --compressed_in
			</div>

			<p> En los scripts que devuelvan algún tipo de output (generalmente con el flag -o), de manera similar, también se puede utilizar el flag --compressed_out 
			para que el resultado se devuelva comprimido en gzip. Además, si no se indica un flag de output (omitiendo '-o archivo_salida') y el script solo devuelve una tabla,
			el contenido se devuelve al stdout en vez de ser escrito en archivo, por lo que puede aprovecharse para pipear en otro script.  Por ejemplo:</p>

			<div class='code'>
				desaggregate_column_data -i patients_and_phens.txt -x 2 --compressed_out | script_que_utiliza_datos_comprimidos
			</div>

			<p>Se pueden usar ambos flags a la vez, de manera que se pueda recibir una tabla comprimida y devolverla también comprimida. Por ejemplo:</p>
			<div class='code'>
				desaggregate_column_data -i patients_and_phens.gz -x 2 --compressed_in --compressed_out -o desaggregated.gz
			</div>

			<p>O utilizando pipes: </p>
			<div class='code'>
				cat patients_and_phens.txt | script_que_devuelve_datos_comprimidos | desaggregate_column_data -i - -x 2 --compressed_in --compressed_out | script_que_utiliza_datos_comprimidos
			</div>

			<p>Finalmente, el flag --transposed se puede utilizar en todos aquellos scripts que carguen y/o escriban tablas, y al utilizarlo, se aplicará la transposición de la 
			tabla en el momento de carga así como de manera previa a la escritura de la misma. </p>

		<% 
			# tool name, html title id, html container id
			tools = [
				['aggregate_column_data', 'agg_from', 'agg_to'],
				['column_filter', 'colfil_from', 'colfil_to'],
				['create_metric_table', 'metr_from', 'metr_to'],
				['desaggregate_column_data', 'desagg_from', 'desagg_to'],
				['excel_to_tabular', 'excel_from', 'excel_to'],
				['filter_by_list', 'filter_from', 'filter_to'],
				['get_columns', 'getcol_from', 'getcol_to'],
				['intersect_columns', 'inter_from', 'inter_to'],
				['merge_tabular', 'merge_from', 'merge_to'],
				['records_count', 'recs_from', 'recs_to'],
				['standard_name_replacer', 'repl_from', 'repl_to'],
				['subset_table', 'subs_from', 'subs_to'],
				['table_linker', 'link_from', 'link_to'],
				['tag_table', 'tag_from', 'tag_to'],
				['transform_to_latex', 'trnsf_from', 'trnsf_to'],
				['transpose_table', 'trnsp_from', 'trnsp_to']
			]
		%>
		% for tool_name, title_id, container_id in tools:
			${create_tool_section(tool_name, title_id, container_id)}
		% endfor	
</div>
