#!/usr/bin/env bash
# build_oca_modules.sh
#
# Concatene des fichiers .list en une seule liste de modules separes par des
# virgules, prete pour "odoo -i" ou "odoo -u".
#
# Format des fichiers .list :
#   - un module par ligne
#   - commentaires avec #  (ligne entiere ou en fin de ligne)
#   - lignes vides ignorees
#   - doublons supprimes (premier garde, ordre preserve)
#   - retours chariot Windows (CR) tolerees
#
# Usage :
#   OCA_MODULES="$(./build_oca_modules.sh ./modules.d)"
#   ./build_oca_modules.sh ./modules.d              # affiche la liste
#   ./build_oca_modules.sh f1.list f2.list          # fichiers explicites

set -euo pipefail

if [ "$#" -eq 0 ]; then
    echo "Usage: $0 <repertoire | fichiers.list...>" >&2
    exit 2
fi

files=()
for arg in "$@"; do
    if [ -d "$arg" ]; then
        # tous les .list du repertoire, ordre alphabetique stable
        while IFS= read -r f; do
            files+=("$f")
        done < <(find "$arg" -maxdepth 1 -type f -name '*.list' | sort)
    elif [ -f "$arg" ]; then
        files+=("$arg")
    else
        echo "Chemin introuvable: $arg" >&2
        exit 2
    fi
done

if [ "${#files[@]}" -eq 0 ]; then
    echo "Aucun fichier .list trouve" >&2
    exit 2
fi

result="$(
    cat "${files[@]}" \
        | sed 's/#.*//' \
        | tr -d ' \t\r' \
        | grep -v '^$' \
        | awk '!seen[$0]++' \
        | paste -sd, -
)" || true

if [ -z "$result" ]; then
    echo "Liste de modules vide (que des commentaires ou des lignes vides ?)" >&2
    exit 1
fi

printf '%s\n' "$result"