#!/bin/bash

# Vérifie si une URL a été fournie
if [ $# -eq 0 ]; then
    echo "Usage: $0 <url>"
    exit 1
fi

url="$1"

user=$(whoami)

# Fonction pour vérifier si un processus est en cours d'exécution pour l'utilisateur courant
is_running() {
    pgrep -u "$user" -x "$1" >/dev/null && return 0 || return 1
}

# Fonction généralisée pour trouver un DISPLAY
# Peut prendre un nom de processus en paramètre optionnel
find_display() {
    local grep_filter=""

    # Si un processus spécifique est demandé, filtrer par ce processus
    if [ -n "$1" ]; then
        grep_filter="$1"
    fi

    # Récupérer le DISPLAY
    local found_display=""
    if [ -n "$grep_filter" ]; then
        found_display=$(ps e -u "$user" | grep "$grep_filter" | grep -o "DISPLAY=[^ ]*" | head -1 | cut -d= -f2)
    else
        # Si aucun processus n'est spécifié, chercher n'importe quel DISPLAY
        found_display=$(ps e -u "$user" | grep -o "DISPLAY=[^ ]*" | head -1 | cut -d= -f2)
    fi

    # echo "$found_display"
}

# Vérifie d'abord si Firefox est déjà en cours d'exécution
if is_running "firefox"; then
    echo "Firefox est déjà en cours d'exécution."
    # Récupérer le DISPLAY directement depuis le processus Firefox
    display=$(find_display "firefox")

    if [ -z "$display" ]; then
        echo "Impossible de déterminer le DISPLAY de Firefox."
        exit 1
    fi

    echo "Utilisation du DISPLAY=$display de Firefox existant."
    DISPLAY=$display firefox --new-tab "$url"
    exit 0
fi

# Si Firefox n'est pas en cours, vérifie si un serveur X est en cours d'exécution
if ! (is_running "Xorg" || is_running "X"); then
    echo "Aucun serveur X détecté. Tentative de démarrage..."
    startx -- vt7
    # Attendre que le serveur X démarre
    sleep 5

    if ! (is_running "Xorg" || is_running "X"); then
        echo "Échec du démarrage du serveur X."
        exit 1
    fi
fi

# Trouver un DISPLAY disponible sans spécifier de processus
display=$(find_display)

if [ -z "$display" ]; then
    # Valeur par défaut si aucun DISPLAY n'est trouvé
    display=":0"
    echo "Aucun DISPLAY trouvé, utilisation de la valeur par défaut: $display"
else
    echo "Utilisation de DISPLAY=$display"
fi

DISPLAY=$display firefox "$url"

exit 0
