#!/bin/bash
# =============================================================================
# par2_init.sh
# Script d'initialisation : crée la parité pour tous les fichiers du disque
# À exécuter une seule fois après la copie initiale des données
# =============================================================================

# Configuration
REDONDANCE=10
BASE="${1:-/Volumes/HDD_Externe}"

# Couleurs pour l'affichage
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# Vérification du chemin
if [ ! -d "$BASE" ]; then
    echo -e "${RED}Erreur : Le chemin $BASE n'existe pas${NC}"
    exit 1
fi

clear
echo -e "${GREEN}=== Initialisation par2 ===${NC}"
echo "Chemin : $BASE"
echo "Redondance : ${REDONDANCE}%"
echo ""

# Compteurs détaillés
total=0
traites=0
erreurs=0
deja_proteges=0
fichiers_par2=0
fichiers_systeme=0
fichiers_vides=0

# Fonction pour vérifier si c'est un fichier système macOS
est_fichier_systeme() {
    local chemin="$1"
    local nom=$(basename "$chemin")
    
    # Fichiers cachés système
    [[ "$nom" == .DS_Store ]] && return 0
    [[ "$nom" == ._* ]] && return 0
    [[ "$nom" == .localized ]] && return 0
    [[ "$nom" == .VolumeIcon.icns ]] && return 0
    
    # Dossiers système macOS (et leur contenu)
    [[ "$chemin" == */.Spotlight-V100/* ]] && return 0
    [[ "$chemin" == */.Spotlight-V100 ]] && return 0
    [[ "$chemin" == */.fseventsd/* ]] && return 0
    [[ "$chemin" == */.fseventsd ]] && return 0
    [[ "$chemin" == */.Trashes/* ]] && return 0
    [[ "$chemin" == */.Trashes ]] && return 0
    [[ "$chemin" == */.TemporaryItems/* ]] && return 0
    [[ "$chemin" == */.TemporaryItems ]] && return 0
    [[ "$chemin" == */.DocumentRevisions-V100/* ]] && return 0
    [[ "$chemin" == */.DocumentRevisions-V100 ]] && return 0
    [[ "$chemin" == */.com.apple.timemachine.donotpresent ]] && return 0
    [[ "$chemin" == */.apdisk ]] && return 0
    
    return 1
}

# Parcours récursif de tous les fichiers
while IFS= read -r -d '' fichier; do
    ((total++))
    
    # Ignorer les fichiers .par2
    if [[ "$fichier" == *.par2 ]]; then
        ((fichiers_par2++))
        continue
    fi
    
    # Ignorer les fichiers système macOS
    if est_fichier_systeme "$fichier"; then
        ((fichiers_systeme++))
        continue
    fi
    
    # Ignorer les fichiers vides (0 octets)
    if [ ! -s "$fichier" ]; then
        ((fichiers_vides++))
        continue
    fi
    
    par2file="${fichier}.par2"
    
    # Vérifier si la parité existe déjà
    if [ -f "$par2file" ]; then
        echo -e "${BLUE}[EXISTANT]${NC} $fichier"
        ((deja_proteges++))
        continue
    fi
    
    echo -e "${GREEN}[CRÉATION]${NC} $fichier"
    par2 create -r"$REDONDANCE" -n1 "$par2file" "$fichier" > /dev/null 2>&1
    
    if [ $? -eq 0 ]; then
        ((traites++))
        # Cacher le fichier .par2 (macOS)
        chflags hidden "$par2file" 2>/dev/null
    else
        echo -e "${RED}[ERREUR]${NC} Échec pour $fichier"
        ((erreurs++))
    fi
    
done < <(find "$BASE" -type f -print0)

# =============================================================================
# Masquage des fichiers de parité
# =============================================================================
clear
echo -e "${BLUE}--- Masquage des fichiers .par2 ---${NC}"
find "$BASE" -name "*.par2" -exec chflags hidden {} \;
echo "Fait."

echo ""
echo -e "${GREEN}=== Terminé ===${NC}"
echo "Fichiers analysés     : $total"
echo "─────────────────────────────"
echo -e "Parités créées        : ${GREEN}$traites${NC}"
echo -e "Déjà protégés         : ${BLUE}$deja_proteges${NC}"
echo -e "Fichiers .par2        : ${YELLOW}$fichiers_par2${NC}"
echo -e "Fichiers système      : ${YELLOW}$fichiers_systeme${NC}"
echo -e "Fichiers vides        : ${YELLOW}$fichiers_vides${NC}"
if [ $erreurs -gt 0 ]; then
    echo -e "Erreurs               : ${RED}$erreurs${NC}"
fi