import os
import sys
from zipfile import ZipFile
from datetime import datetime

def add_folder_to_zip(zipf, folder):
    for root, dirs, files in os.walk(folder):
        for file in files:
            zipf.write(os.path.join(root, file), os.path.relpath(os.path.join(root, file), os.path.join(folder, '..')))

def extract_files(zip_name, extract_to):
    with ZipFile(zip_name, 'r') as zipf:
        zipf.extractall(extract_to)

def main(environment):
    # Lista di file e cartelle da zippare
    files_and_folders_to_zip = ['portale.py', 'api_sync.py', 'app.wsgi', 'requirements.txt', 'sql', 'static', 'templates', 'utils.py', 'README.md']

    # Aggiungere il file di configurazione specifico per l'ambiente
    config_file = None
    if environment == 'local':
        config_file = 'app-config.local'
    elif environment == 'test':
        config_file = 'app-config.test'
    elif environment == 'prod':
        config_file = 'app-config.prod'
    
    current_time = datetime.now().strftime("%Y%m%d-%H%M%S")
    output_zip = f'portale-{environment}-{current_time}.zip'

    with ZipFile(output_zip, 'w') as zipf:
        for item in files_and_folders_to_zip:
            if os.path.isfile(item):
                zipf.write(item)
            elif os.path.isdir(item):
                add_folder_to_zip(zipf, item)
            else:
                print(f"L'elemento {item} non esiste e non sarà aggiunto all'archivio.")

        if config_file:
            if os.path.isfile(config_file):
                zipf.write(config_file, arcname='app-config.properties')
            else:
                print(f"ERROE: Il file di configurazione {config_file} non esiste e non sarà aggiunto all'archivio.")

    print(f"Archivio {output_zip} creato con successo.")

    destination_folder = 'portale-awareness'
    extract_files(output_zip, destination_folder)

    print(f"File estratti con successo nella cartella {destination_folder}.")

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Utilizzo: python script.py [local|test|prod]")
        sys.exit(1)
    
    environment = sys.argv[1]
    if environment not in ['local', 'test', 'prod']:
        print("L'argomento deve essere uno tra: local, test, prod")
        sys.exit(1)
    
    main(environment)
