#!/bin/bash

AKCJA="$1"
PARAM="$2"
SIGNAŁ="${3:-TERM}"

function wyswietl_pomoc {
    echo "Użycie: $0 <akcja> [parametr] [sygnał]"
    echo ""
    echo "Akcje:"
    echo "  list                - wyświetl wszystkie procesy użytkownika"
    echo "  find <nazwa>        - wyszukaj proces po nazwie"
    echo "  kill <PID> [sygnał]  - zabij proces (TERM lub KILL)"
    echo ""
    echo "Przykłady:"
    echo "  $0 list"
    echo "  $0 find bash"
    echo "  $0 kill 1234"
    echo "  $0 kill 1234 KILL"
    exit 0
}

if [[ $# -eq 0 ]]; then
    wyswietl_pomoc
fi

if [[ "$AKCJA" == "list" ]]; then
    echo "=================================="
    echo "  PROCESY UŻYTKOWNIKA: $USER"
    echo "=================================="
    ps -u "$USER" -o pid,ppid,pcpu,pmem,etime,comm --no-headers 2>/dev/null | head -50
    echo "=================================="
    exit 0

elif [[ "$AKCJA" == "find" ]]; then
    if [[ -z "$PARAM" ]]; then
        echo "Błąd: Podaj nazwę procesu"
        exit 1
    fi
    
    echo "=================================="
    echo "  SZUKANIE PROCESU: $PARAM"
    echo "=================================="
    
    if pgrep -f "$PARAM" > /dev/null 2>&1; then
        pgrep -f "$PARAM" -a | while read pid reszta; do
            if ps -p "$pid" > /dev/null 2>&1; then
                user=$(ps -o user= -p "$PID" 2>/dev/null || echo "$USER")
                etime=$(ps -o etime= -p "$PID" 2>/dev/null || echo "?")
                comm=$(ps -o comm= -p "$PID" 2>/dev/null || echo "?")
                proc_user=$(ps -u -p "$pid" 2>/dev/null | awk 'NR>1 {print $1}')
                echo "PID: $pid | Użytkownik: $proc_user | Czas: $etime | Polecenie: $comm"
            fi
        done
        
        wynik=$(pgrep -f "$PARAM" | wc -l)
        echo ""
        echo "Znaleziono: $wynik proces(ów)"
    else
        echo "Nie znaleziono procesu: $PARAM"
        exit 1
    fi
    exit 0

elif [[ "$AKCJA" == "kill" ]]; then
    if [[ -z "$PARAM" ]]; then
        echo "Błąd: Podaj PID procesu"
        exit 1
    fi
    
    PID="$PARAM"
    
    if ! ps -p "$PID" > /dev/null 2>&1; then
        echo "Błąd: Proces o PID $PID nie istnieje"
        exit 1
    fi
    
    case "$PID" in
        1|2|3|4|5|6|7|8|9)
            echo "Błąd: Nie można zabić krytycznego procesu systemowego (PID $PID)"
            exit 1
            ;;
    esac
    
    proc_user=$(ps -u -p "$PID" 2>/dev/null | awk 'NR>1 {print $1}')
    
    if [[ "$proc_user" != "$USER" ]] && [[ $EUID -ne 0 ]]; then
        echo "Błąd: Nie można zabić procesu innego użytkownika bez uprawnień root"
        exit 1
    fi
    
    if [[ "$SIGNAŁ" == "KILL" ]]; then
        syg=-9
        syg_name="SIGKILL"
    else
        syg=-15
        syg_name="SIGTERM"
    fi
    
    echo "Wysyłam $syg_name do procesu PID: $PID"
    
    if kill -$syg "$PID" 2>/dev/null; then
        sleep 1
        
        if ! ps -p "$PID" > /dev/null 2>&1; then
            echo "Sukces: Proces zakończony"
            exit 0
        else
            if [[ $syg -eq -9 ]]; then
                echo "Ostrzeżenie: Proces nadal działa po SIGKILL"
                exit 1
            else
                echo "Sukces: Proces zakończony"
                exit 0
            fi
        fi
    else
        echo "Błąd: Nie udało się zakończyć procesu"
        exit 1
    fi

else
    echo "Błąd: Nieznana akcja '$AKCJA'"
    wyswietl_pomoc
fi