#!/bin/bash

# Configuración de rutas y archivos
DIRECTORIO_ACTUAL="$(dirname "$0")"
cd "$DIRECTORIO_ACTUAL"

ARCHIVO_KEY="privada.key"
ARCHIVO_CSR="request.csr"
ARCHIVO_TXT="PEGAR_CONTENIDO.txt"
ARCHIVO_CER="Certificado.cer"
ARCHIVO_PFX="Certificado_Final.pfx"

# Función para limpiar la pantalla y mostrar encabezado
mostrar_menu() {
    clear
    echo "============================================================="
    echo "   GESTOR DE FIRMA DIGITAL - CORREO URUGUAYO (MAC/LINUX)     "
    echo "============================================================="
    echo " 1) PARTE 1: Crear Clave Privada y Petición (PKCS10)"
    echo " 2) PARTE 2: Crear archivo PFX (Luego de recibir el .cer)"
    echo " 3) Salir"
    echo "-------------------------------------------------------------"
    read -p "Seleccione una opción [1-3]: " OPCION
}

# --- PARTE 1: GENERACIÓN DE REQUEST ---
generar_peticion() {
    echo ""
    echo "Iniciando Generación de Clave y Petición..."
    
    openssl req -new -newkey rsa:2048 -nodes -keyout "$ARCHIVO_KEY" -out "$ARCHIVO_CSR"
    
    if [ $? -eq 0 ]; then
        # Limpieza del CSR para generar el TXT listo para pegar
        sed -e '1d' -e '$d' "$ARCHIVO_CSR" | tr -d '\n' | tr -d '\r' > "$ARCHIVO_TXT"
        
        echo ""
        echo "----------------------------------------------------------"
        echo "¡PRIMERA PARTE COMPLETADA!"
        echo "El archivo $ARCHIVO_TXT se abrirá automáticamente."
        echo "Copie su contenido en la web del Correo Uruguayo."
        echo "----------------------------------------------------------"
        
        if [[ "$OSTYPE" == "darwin"* ]]; then
            open -e "$ARCHIVO_TXT"
        else
            xdg-open "$ARCHIVO_TXT" 2>/dev/null || cat "$ARCHIVO_TXT"
        fi
        
    else
        echo "Error al generar la petición."
    fi
    read -p "Presione Enter para volver al menú..."
} # <-- AQUÍ ESTABA EL ERROR ANTERIOR (HABÍA DOS LLAVES)

# --- PARTE 2: GENERACIÓN DE PFX ---
generar_pfx() {
    echo ""
    # Si no están en la carpeta, permitir arrastrarlos
    if [ ! -f "$ARCHIVO_KEY" ]; then
        echo "No se encontró $ARCHIVO_KEY en la carpeta."
        read -p "Arrastre aquí su archivo .key y presione Enter: " RUTA_KEY
        ARCHIVO_KEY=$(echo $RUTA_KEY | sed "s/'//g" | sed 's/"//g' | xargs)
    fi
    
    if [ ! -f "$ARCHIVO_CER" ]; then
        echo "No se encontró $ARCHIVO_CER en la carpeta."
        read -p "Arrastre aquí su archivo .cer y presione Enter: " RUTA_CER
        ARCHIVO_CER=$(echo $RUTA_CER | sed "s/'//g" | sed 's/"//g' | xargs)
    fi

    if [ ! -f "$ARCHIVO_KEY" ] || [ ! -f "$ARCHIVO_CER" ]; then
        echo "[ERROR] Faltan archivos."
        read -p "Presione Enter para volver..."
        return
    fi

    echo "Defina una contraseña para su nuevo archivo PFX."
    read -s -p "Contraseña: " PASS_PFX
    echo ""

    echo "Generando Certificado PFX..."
    openssl pkcs12 -export -out "$ARCHIVO_PFX" -inkey "$ARCHIVO_KEY" -in "$ARCHIVO_CER" \
        -name "Certificado Firma Digital" -passout pass:"$PASS_PFX"

    if [ $? -eq 0 ]; then
        echo ""
        echo "----------------------------------------------------------"
        echo "¡SEGUNDA PARTE COMPLETADA CON ÉXITO!"
        echo "Se ha creado: $ARCHIVO_PFX"
        echo "----------------------------------------------------------"
    else
        echo "Error en la creación del archivo PFX."
    fi
    read -p "Presione Enter para volver al menú..."
}

# Ejecución del programa
while true; do
    mostrar_menu
    case $OPCION in
        1) generar_peticion ;;
        2) generar_pfx ;;
        3) exit 0 ;;
        *) echo "Opción no válida." ; sleep 1 ;;
    esac
done