#!/usr/bin/env bash
set -euo pipefail

# Detección automática del TTY y usuario si no se pasan como argumentos
tty="${1:-$(tmux display-message -p '#{pane_tty}' 2>/dev/null)}"
user="${2:-$(whoami)}"


LOG_FILE="/var/log/tmux-status/${user}.log"
exec 2>>"$LOG_FILE"  # Abre el descriptor 2 para escribir logs
exec 3>>"$LOG_FILE"  # Abre el descriptor 3 para escribir logs
log() { echo "[$(date '+%F %T')] $*" >&3; }

log "Usuario=$user, tty=$tty, TMUX iniciado"

# Si no se encuentra el TTY, no se muestra nada
if [[ -z "$tty" ]]; then
    log "Usuario=$user no tiene TTY"
    exit 0
fi

# Cargamos variables globales del sistema (como SESSION_TIMEOUT)
if [[ -f /etc/environment ]]; then
    source /etc/environment
fi

# Timeout por defecto en minutos
timeout_min="${SESSION_TIMEOUT:-15}"
timeout_sec=$((timeout_min * 60))

# Buscamos sesiones SSH asociadas al TTY actual
mapfile -t ses_array < <(
ps -eo etimes,pid,cmd --sort=etimes \
| awk -v u=$user -v t=$(basename "$tty") '$0 ~ ("sshd: " u "@pts/" t "$") {print $1, $2}'
)

# Si no hay sesión SSH asociada, salimos sin mostrar nada
if [[ ${#ses_array[@]} -eq 0 ]]; then
    log "Usuario=$user, tty=$tty no esta conectado mediante SSH"
    exit 0
fi

log "ses_array=$ses_array"

for entry in "${ses_array[@]}"; do
    read -r ses_time ses_pid <<< "$entry"
    remain=$((timeout_sec - ses_time))
    log "Usuario=$user TTY=$tty PID=$ses_pid restante=$remain"
    ((remain < 0)) && remain=0

    # Colores según tiempo restante
    if   (( remain <= 30 ));  then seg='#[fg=colour231,bg=colour1,bold]'
    elif (( remain <= 60 ));  then seg='#[fg=colour231,bg=colour202,bold]'
    elif (( remain <= 300 )); then seg='#[fg=colour16,bg=colour226,bold]'
    else                          seg='#[fg=colour238,bg=colour148]'
    fi

    # Mostramos el contador visual
    printf '%s ⏳ timeout: %ss #[default]' "$seg" "$remain"

    # Si ya expiró el tiempo, matamos el proceso SSH correspondiente
    (( remain == 0 )) && kill -9 "$ses_pid" 2>/dev/null || true
done
