#!/usr/bin/env python3
import os
import zipfile
import logging

logging.basicConfig(level=logging.INFO, format='%(levelname)s: %(message)s')

def create_export_zip(zip_filename="piaware_export.zip"):
    """
    Génère un fichier ZIP contenant le projet prêt pour le déploiement ou la portabilité.
    Ignore les dossiers générés automatiquement (cache, venv) et les bases de données lourdes.
    """
    # Dossiers et fichiers à exclure formellement
    EXCLUDE_DIRS = {'venv', '__pycache__', 'cache', '.git'}
    EXCLUDE_EXTS = {'.db', '.log', '.zip', '.pyc'}
    
    current_dir = os.path.dirname(os.path.abspath(__file__))
    zip_filepath = os.path.join(current_dir, zip_filename)
    
    logging.info(f"Début de la création de l'archive : {zip_filepath}")
    
    with zipfile.ZipFile(zip_filepath, 'w', zipfile.ZIP_DEFLATED) as zipf:
        for root, dirs, files in os.walk(current_dir):
            # Modification in-place de la liste 'dirs' pour ignorer les répertoires exclus
            dirs[:] = [d for d in dirs if d not in EXCLUDE_DIRS]
            
            for file in files:
                # Vérification de l'extension
                _, ext = os.path.splitext(file)
                if ext in EXCLUDE_EXTS or file == zip_filename:
                    continue
                    
                absolute_path = os.path.join(root, file)
                # Chemin relatif pour le ZIP (pour éviter d'embarquer /home/pi/...)
                relative_path = os.path.relpath(absolute_path, current_dir)
                
                logging.info(f"Ajout : {relative_path}")
                zipf.write(absolute_path, arcname=relative_path)
                
    logging.info(f"Archive créée avec succès : {zip_filename}")
    size_mb = os.path.getsize(zip_filepath) / (1024 * 1024)
    logging.info(f"Taille finale : {size_mb:.2f} MB")

if __name__ == "__main__":
    create_export_zip()
