#!/bin/sh -euf

components_dir="/usr/share/alterator/components"
backends_dir="/etc/alterator/backends"
prefix="autogenerated-component-"
exec_dir="/usr/lib/alterator/backends"

[ -d "$backends_dir" ] || exit 0
[ -w "$backends_dir" ] || exit 0
[ -d "$components_dir" ] || exit 0

find "$backends_dir" -name "${prefix}*.backend" -type f -print0 | xargs -0 rm -f '{}'

find "$components_dir" -name '*.component' | while read -r file; do
	filename=$(basename "$file")
	component_name="${filename%.*}"
	backend_name="$(echo "$component_name" | tr "-" "_")"
	backend_path="$backends_dir/$prefix$component_name.backend"

	cat >"$backend_path" <<EOF
type = "Backend"
module = "executor"
name = "component_$backend_name"
interface = "component1"

[methods.Info]
execute = "$exec_dir/component info $component_name"
stdout_bytes = true
exit_status  = true

[methods.Description]
execute = "$exec_dir/component description $component_name"
stdout_bytes = true
exit_status  = true
environment.LC_ALL = {}

[methods.DescriptionRaw]
execute = "$exec_dir/component description $component_name --raw"
stdout_bytes = true
exit_status  = true
environment.LC_ALL = {}

[methods.Status]
execute = "$exec_dir/component status $component_name"
stdout_strings = true
exit_status = true
EOF

done
