#!/bin/sh -euf

sources_dir="/usr/share/alterator/sources"
backends_dir="/etc/alterator/backends"
prefix="autogenerated-source-"
exec="python3 -m alterator_backend_source.cli.main"

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

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

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

	cat >"$backend_path" <<EOF
type = "Backend"
module = "executor"
name = "source_$backend_name"
interface = "source1"
exit_status = false

[methods.Info]
execute = "$exec get $source_name --json"
stdout_json = [ "data" ]
exit_status = false

[methods.Status]
execute = "$exec status $source_name --json"
stdout_json = [ "data" ]
exit_status = false

[methods.CheckApply]
execute = "$exec check-apply $source_name --mirrors '{mirror}' --components {components[]} --multiarch {multiarch_additions[]} --sign '{sign_key_name}' --json"
stdout_json = [ "will_be_enabled[]", "will_be_disabled[]" ]
exit_status = false

[methods.Apply]
execute = "$exec apply $source_name --mirrors '{mirror}' --components {components[]} --multiarch {multiarch_additions[]} --sign '{sign_key_name}'"
exit_status = false

[methods.CheckSign]
execute = "$exec check-sign $source_name --sign '{sign_key_name}' --mirror '{mirror}'"
stdout_bytes = true
stderr_strings = true
exit_status = true
EOF

done
