import os
import uuid
import shutil
import json
import subprocess
import hashlib
from datetime import datetime

# Archivo JSON para guardar los datos de los contenedores
CONTAINER_DATA_FILE = os.getenv("CONTAINER_DATA_FILE")
# Nombre y etiqueta para la imagen base
BASE_IMAGE_TAG = os.getenv("BASE_IMAGE_TAG")

CONTENEDOR_IDENTIFICADOR = "9755e379cd01"

# -------------------------------
# Función: Eliminar un contenedor por ID o nombre y actualizar el JSON
# -------------------------------
def delete_container(identifier):
    if not os.path.exists(CONTAINER_DATA_FILE):
        print("❌ No hay archivo JSON de contenedores.")
        return

    with open(CONTAINER_DATA_FILE, 'r') as file:
        containers = json.load(file)

    # Determinar si el identificador es un ID o un nombre
    container = next((c for c in containers if c['id'] == identifier or c['name'] == identifier), None)
    if not container:
        print(f"❌ No se encontró ningún contenedor con ID o nombre: {identifier} en el JSON.")
        return

    try:
        # Comprobar si el contenedor existe realmente en Docker
        result = subprocess.getoutput(f"docker ps -a -q -f id={container['id']}")
        if not result:
            print(f"⚠️ El contenedor {container['name']} ya no existe en Docker. Eliminando del JSON...")
        else:
            # Eliminar el contenedor y su red asociada
            print(f"➤ Eliminando contenedor: {container['name']} con ID: {container['id']}")
            os.system(f"docker rm -f {container['id']}")
            print(f"➤ Eliminando red: {container['network']}")
            os.system(f"docker network rm {container['network']}")
            eliminar_carpeta(container['name'])
            print(f"➤ Eliminando carpeta: {container['network']}")

        # Actualizar el JSON excluyendo el contenedor eliminado
        containers = [c for c in containers if c['id'] != container['id']]
        with open(CONTAINER_DATA_FILE, 'w') as file:
            json.dump(containers, file, indent=4)

        print(f"✔ Contenedor {container['name']} eliminado correctamente.")
    except Exception as e:
        print(f"❌ Error eliminando el contenedor {container['name']}: {e}")

# -------------------------------
# Función: Eliminar carpeta de datos de un contenedor
# -------------------------------

def eliminar_carpeta(nombre_carpeta):
    ruta_carpeta = os.path.join('d_apps/', nombre_carpeta)
    shutil.rmtree(ruta_carpeta)
    print(f"✔ Carpeta {nombre_carpeta} eliminada correctamente.")


# -------------------------------
# Función: Limpiar imágenes huérfanas
# -------------------------------
def clean_unused_images():
    print("➤ Eliminando imágenes huérfanas...")
    os.system('docker image prune -f')

# -------------------------------
# Función: Limpiar redes huérfanas
# -------------------------------
def clean_unused_networks():
    print("➤ Eliminando redes huérfanas...")
    os.system('docker network prune -f')


if __name__ == "__main__":
    identifier = CONTENEDOR_IDENTIFICADOR

    if identifier:
        delete_container(identifier)

        # Limpiar imágenes y redes huérfanas
        clean_unused_images()
        clean_unused_networks()

    else:
        print("❌ No se ingresó ningún ID o nombre.")
