#!/bin/bash
# systeemiraportti.sh
# Tuottaa tiedoston systeemiraportti.txt koneen perustiedoista.
# Tarkoitettu liitteeksi Arch Linuxin vianmääritysohjeeseen.
# Aktivoi tämä skripti komennolla chmod +x "/hakemistopolku/systeemiraportti.sh"
# Sen jälkeen aja tämä skripti komennolla "/hakemistopolku/systeemiraportti.sh"

Tiedosto="systeemiraportti.txt"

# ---------------------------------------------------------------------------
# Riippuvuuksien tarkistus
# Muoto: ["komento"]="paketti"
# ---------------------------------------------------------------------------
declare -A tarvittavat=(
    ["inxi"]="inxi"
    ["free"]="procps-ng"
    ["nano"]="nano"
)

puuttuvat=()
for komento in "${!tarvittavat[@]}"; do
    if ! command -v "${komento}" &>/dev/null; then
        puuttuvat+=("${tarvittavat[$komento]}")
    fi
done

if [ ${#puuttuvat[@]} -gt 0 ]; then
    echo "Seuraavat paketit puuttuvat:"
    for paketti in "${puuttuvat[@]}"; do
        echo "  - ${paketti}"
    done
    echo ""
    read -rp "Asennetaanko puuttuvat paketit nyt? (k/e): " vastaus
    if [[ "${vastaus}" =~ ^[Kk]$ ]]; then
        sudo pacman -S "${puuttuvat[@]}"
        # Tarkistetaan onnistuiko asennus
        for komento in "${!tarvittavat[@]}"; do
            if ! command -v "${komento}" &>/dev/null; then
                echo "Virhe: '${komento}' ei ole käytettävissä asennuksen jälkeen. Lopetetaan."
                exit 1
            fi
        done
    else
        echo "Paketteja ei asennettu. Lopetetaan."
        exit 1
    fi
fi

# Tyhjennetään mahdollinen vanha raportti
echo "" > "${Tiedosto}"

# ---------------------------------------------------------------------------
# Otsikko
# ---------------------------------------------------------------------------
koneen_nimi="$(hostnamectl --static)"
aika="$(date '+%d.%m.%Y %H:%M')"

echo "============================================================" >> "${Tiedosto}"
echo "  SYSTEEMIRAPORTTI"                                          >> "${Tiedosto}"
echo "  Kone : ${koneen_nimi}"                                     >> "${Tiedosto}"
echo "  Aika  : ${aika}"                                           >> "${Tiedosto}"
echo "============================================================" >> "${Tiedosto}"
echo ""                                                            >> "${Tiedosto}"

# ---------------------------------------------------------------------------
# Haetaan inxi-tiedot kerralla (nopeus + yhtenäisyys)
# ---------------------------------------------------------------------------
inxi_data="$(inxi -Fxxxz)"

# ---------------------------------------------------------------------------
# Käyttöjärjestelmä ja ydin
# ---------------------------------------------------------------------------
echo "------------------------------------------------------------" >> "${Tiedosto}"
echo "KÄYTTÖJÄRJESTELMÄ"                                           >> "${Tiedosto}"
echo "------------------------------------------------------------" >> "${Tiedosto}"

echo "${inxi_data}" | grep -E "Kernel|Distro" \
    | sed 's/^[[:space:]]*//' >> "${Tiedosto}"
echo "" >> "${Tiedosto}"

# ---------------------------------------------------------------------------
# Emolevytiedot
# ---------------------------------------------------------------------------
echo "------------------------------------------------------------" >> "${Tiedosto}"
echo "EMOLEVY JA BIOS"                                             >> "${Tiedosto}"
echo "------------------------------------------------------------" >> "${Tiedosto}"

echo "${inxi_data}" | grep -E "Mobo|BIOS" \
    | sed 's/^[[:space:]]*//' >> "${Tiedosto}"
echo "" >> "${Tiedosto}"

# ---------------------------------------------------------------------------
# Työpöytäympäristö
# ---------------------------------------------------------------------------
echo "------------------------------------------------------------" >> "${Tiedosto}"
echo "TYÖPÖYTÄYMPÄRISTÖ"                                           >> "${Tiedosto}"
echo "------------------------------------------------------------" >> "${Tiedosto}"

echo "${inxi_data}" | grep -E "Desktop|Compositor|tk|wm" \
    | sed 's/^[[:space:]]*//' >> "${Tiedosto}"
echo "" >> "${Tiedosto}"

# ---------------------------------------------------------------------------
# Suoritin (CPU)
# ---------------------------------------------------------------------------
echo "------------------------------------------------------------" >> "${Tiedosto}"
echo "SUORITIN (CPU)"                                              >> "${Tiedosto}"
echo "------------------------------------------------------------" >> "${Tiedosto}"

echo "${inxi_data}" | grep -E "Info:|Topology" \
    | sed 's/^[[:space:]]*//' >> "${Tiedosto}"
echo "" >> "${Tiedosto}"

# ---------------------------------------------------------------------------
# Näytönohjain ja näyttö
# ---------------------------------------------------------------------------
echo "------------------------------------------------------------" >> "${Tiedosto}"
echo "NÄYTÖNOHJAIN JA NÄYTTÖ"                                     >> "${Tiedosto}"
echo "------------------------------------------------------------" >> "${Tiedosto}"

echo "${inxi_data}" | grep -E "Device-[0-9]|Display|renderer|OpenGL" \
    | sed 's/^[[:space:]]*//' >> "${Tiedosto}"
echo "" >> "${Tiedosto}"

# ---------------------------------------------------------------------------
# Muistikorttipaikat (RAM)
# ---------------------------------------------------------------------------
echo "------------------------------------------------------------" >> "${Tiedosto}"
echo "KESKUSMUISTI (RAM)"                                          >> "${Tiedosto}"
echo "------------------------------------------------------------" >> "${Tiedosto}"

echo "${inxi_data}" | grep -E "RAM:|Memory" \
    | sed 's/^[[:space:]]*//' >> "${Tiedosto}"
echo "" >> "${Tiedosto}"

echo "Muistinkäyttö:"                                             >> "${Tiedosto}"
free -h >> "${Tiedosto}"
echo "" >> "${Tiedosto}"

# ---------------------------------------------------------------------------
# Tallennuslaitteet
# ---------------------------------------------------------------------------
echo "------------------------------------------------------------" >> "${Tiedosto}"
echo "TALLENNUSLAITTEET"                                           >> "${Tiedosto}"
echo "------------------------------------------------------------" >> "${Tiedosto}"

echo "${inxi_data}" | grep -E "ID-[0-9]:" \
    | sed 's/^[[:space:]]*//' >> "${Tiedosto}"
echo "" >> "${Tiedosto}"

# ---------------------------------------------------------------------------
# Levytilan käyttö
# ---------------------------------------------------------------------------
echo "------------------------------------------------------------" >> "${Tiedosto}"
echo "LEVYTILAN KÄYTTÖ"                                            >> "${Tiedosto}"
echo "------------------------------------------------------------" >> "${Tiedosto}"

df -h --output=source,size,used,avail,pcent,target \
    | grep -v "tmpfs\|devtmpfs\|udev" >> "${Tiedosto}"
echo "" >> "${Tiedosto}"

# ---------------------------------------------------------------------------
# Lämpötilat
# ---------------------------------------------------------------------------
echo "------------------------------------------------------------" >> "${Tiedosto}"
echo "LÄMPÖTILAT JA KIERROSNOPEUDET"                              >> "${Tiedosto}"
echo "------------------------------------------------------------" >> "${Tiedosto}"

echo "${inxi_data}" | grep -E "Temperatures|Fan" \
    | sed 's/^[[:space:]]*//' >> "${Tiedosto}"
echo "" >> "${Tiedosto}"

# ---------------------------------------------------------------------------
# Verkkolaitteet
# ---------------------------------------------------------------------------
echo "------------------------------------------------------------" >> "${Tiedosto}"
echo "VERKKOLAITTEET"                                              >> "${Tiedosto}"
echo "------------------------------------------------------------" >> "${Tiedosto}"

echo "${inxi_data}" | grep -E "Device-[0-9].*net|IF:|IF-ID" \
    | sed 's/^[[:space:]]*//' >> "${Tiedosto}"
echo "" >> "${Tiedosto}"

# ---------------------------------------------------------------------------
# Virheet journal-lokista (enintään 10 riviä, prioriteetti 3 = virhe/kriittinen)
# ---------------------------------------------------------------------------
echo "============================================================" >> "${Tiedosto}"
echo "VIRHEET JÄRJESTELMÄLOKISSA (journalctl -p 3 -xb)"           >> "${Tiedosto}"
echo "Enintään 10 viimeisintä virhettä tältä käynnistyskerralta:" >> "${Tiedosto}"
echo "============================================================" >> "${Tiedosto}"

journal_virheet="$(journalctl -p 3 -xb --no-pager -o short-precise 2>/dev/null \
    | grep -v '^-- ' | tail -n 10)"

if [ -z "${journal_virheet}" ]; then
    echo "Ei virheitä tällä käynnistyskerralla." >> "${Tiedosto}"
else
    echo "${journal_virheet}" >> "${Tiedosto}"
fi

echo "" >> "${Tiedosto}"
echo "============================================================" >> "${Tiedosto}"
echo "  Raportti valmis: ${aika}"                                  >> "${Tiedosto}"
echo "============================================================" >> "${Tiedosto}"

# ---------------------------------------------------------------------------
# Avaa raportti tekstieditorissa
# ---------------------------------------------------------------------------
nano "${Tiedosto}"



