#!/bin/bash

productfamily=$(<"/sys/devices/virtual/dmi/id/product_family")
productname=$(<"/sys/devices/virtual/dmi/id/product_name")
vendor=$(<"/sys/devices/virtual/dmi/id/chassis_vendor")

biosvendor=$(<"/sys/devices/virtual/dmi/id/bios_vendor")
biosdate=$(<"/sys/devices/virtual/dmi/id/bios_date")
biosrelease=$(<"/sys/devices/virtual/dmi/id/bios_release")
biosver=$(<"/sys/devices/virtual/dmi/id/bios_version")

prevdir=$(pwd)

if [[ "$vendor" == "Framework" ]]; then
    if ! which ectool ; then
        echo "Please install the Framework Ectool: (fw-ectool-git)"
        yay fw-ectool-git
    fi
    if ! which framework_tool ; then
        echo "Please install Framework-Tool: (framework-system)"
        yay framework-system
    fi
fi
if ! which fastfetch ; then
    echo "Please install fastfetch"
    sudo pacman -S fastfetch
fi


echo "Clearing output log..."
echo "" > hwoutput.md
mkdir "/tmp/hwscan" > /dev/null || true
echo "" > /tmp/hwscan/hwmon.md

getFramework() {
    echo "## FWT Summary" >> hwoutput.md
    echo "\`\`\`" >> hwoutput.md
    sudo framework_tool --info >> hwoutput.md
    echo "\`\`\`" >> hwoutput.md

    echo "## ECTool" >> hwoutput.md
    echo "Checking ECTool results... (you may need to type password)"
    echo "### Temperatures " >> hwoutput.md
    echo "\`\`\`" >> hwoutput.md
    sudo ectool temps all >> hwoutput.md
    echo "\`\`\`" >> hwoutput.md
    echo "### Fanspeed output" >> hwoutput.md
    echo "\`\`\`" >> hwoutput.md
    sudo ectool pwmgetfanrpm all >> hwoutput.md
    echo "\`\`\`" >> hwoutput.md
    echo "## Framework_Tool (framework-system)" >> hwoutput.md
    echo "Checking framework_tool results... (you may need to type password)"
    echo "### --nvidia" >> hwoutput.md
    echo "\`\`\`" >> hwoutput.md
    sudo framework_tool --nvidia >> hwoutput.md 2>/dev/null || true
    echo "\`\`\`" >> hwoutput.md
    echo "### --expansion-bay" >> hwoutput.md
    echo "\`\`\`" >> hwoutput.md
    sudo framework_tool --expansion-bay || true >> hwoutput.md
    echo "\`\`\`" >> hwoutput.md
    echo "### --thermal" >> hwoutput.md
    echo "\`\`\`" >> hwoutput.md
    sudo framework_tool --thermal >> hwoutput.md
    echo "\`\`\`" >> hwoutput.md
    echo "Recording Embedded Controller Data..."
    echo "## EC Information" >> hwoutput.md
    cd /sys/class/chromeos/cros_ec
    echo "* Location: $(pwd -P)" >> $prevdir/hwoutput.md
    echo "* FILES: " >> $prevdir/hwoutput.md
    echo "\`\`\`" >> $prevdir/hwoutput.md
    ls -1 >> $prevdir/hwoutput.md
    echo "\`\`\`" >> $prevdir/hwoutput.md
    cd device
    echo "### DEVICE FILES" >> $prevdir/hwoutput.md
    echo " " >> $prevdir/hwoutput.md
    echo "\`\`\`" >> $prevdir/hwoutput.md
    ls -1 >> $prevdir/hwoutput.md
    echo "\`\`\`" >> $prevdir/hwoutput.md
    echo " " >> $prevdir/hwoutput.md
    echo "### DEVICE FILE DATA" >> $prevdir/hwoutput.md
    find -P . -type f -print0 |
    while IFS= read -r -d '' file; do
        filedata=$(cat "$file")
        filedata="${filedata%$'\n'}"
            echo "#### $file:" >> $prevdir/hwoutput.md
            echo "\`\`\`" >> $prevdir/hwoutput.md
            echo "$filedata" >> $prevdir/hwoutput.md
            echo "\`\`\`" >> $prevdir/hwoutput.md
    done
    echo "# EC LEDs" >> $prevdir/hwoutput.md
    echo "## Raw data collection" >> $prevdir/hwoutput.md
    cd $prevdir
}

fastfetch -c /usr/share/fastfetch/presets/all.jsonc > /tmp/hwscan/fetch.txt

if [[ "$productfamily" == "To be filled by O.E.M." ]]; then
    echo "# $(id -nu 1000)'s Custom PC ($vendor)" > hwoutput.md
else
    echo "# $(id -nu 1000)'s $vendor $productname" > hwoutput.md
fi
echo "* Board: $vendor $productname" >> hwoutput.md
echo "* Bios:" >> hwoutput.md
echo "  * Vendor: $biosvendor" >> hwoutput.md
echo "  * Release: $biosrelease" >> hwoutput.md
echo "  * Version: $biosver" >> hwoutput.md
echo "  * Date: $biosdate" >> hwoutput.md
echo "\`\`\`" >> hwoutput.md
echo "$(cat /sys/devices/virtual/dmi/id/modalias)" >> hwoutput.md
echo "\`\`\`" >> hwoutput.md
echo " " >> hwoutput.md
if [[ "$vendor" == "Framework" ]]; then
    getFramework
fi
echo "" >> hwoutput.md

## Scan hwmon(x)
echo "Scanning hwmon"
i=0
for dir in "/sys/class/hwmon/"*; do
    echo "[hwmon$i]"
    echo "    Name: $(cat "$dir/name")"
    if [ -e "$dir/device/type" ]; then
        echo "    Type: $(cat "$dir/device/type")"
    else
        echo "    Type: ?"
    fi
    for file in "$dir/"*; do
        if [[ "$file" == *"temp"* ]]; then
            temperaturefiles="Y"
        fi
    done
    if [ "$temperaturefiles" == "Y" ]; then
        echo "    Temperature files: Yes"
    fi
    temperaturefiles="N"
    ((i++))
done
i=0
for dir in "/sys/class/hwmon/hwmon"*; do
    echo "# Hwmon$i" >> /tmp/hwscan/hwmon.md
    echo "* Name: $(cat "$dir/name")" >> /tmp/hwscan/hwmon.md
    if [ -e "$dir/device/type" ]; then
        echo "* Type: $(cat "$dir/device/type")" >> /tmp/hwscan/hwmon.md
    else
        echo "* Type: ?" >> /tmp/hwscan/hwmon.md
    fi
    echo "\`\`\`" >> /tmp/hwscan/hwmon.md
    ls -1 "/sys/class/hwmon/hwmon$i" >> /tmp/hwscan/hwmon.md
    echo "\`\`\`" >> /tmp/hwscan/hwmon.md
    echo "# Hwmon$i" >> /tmp/hwscan/hwmon$i.md
    echo "## File List:" >> /tmp/hwscan/hwmon$i.md
    for file in "/sys/class/hwmon/hwmon$i"/*; do
        echo "* $(basename "$file")" >> /tmp/hwscan/hwmon$i.md
    done
    echo "## File Contents:" >> /tmp/hwscan/hwmon$i.md
    for file in "/sys/class/hwmon/hwmon$i/"*; do
        basename="$(basename "$file")"
        if [ -d "$file" ]; then
            echo "## $(basename "$file")" >> /tmp/hwscan/hwmon$i.md
            echo "\`FOLDER\`" >> /tmp/hwscan/hwmon$i.md
        else
            echo "## $(basename "$file")" >> /tmp/hwscan/hwmon$i.md
            echo "\`$(cat "$file")\`" >> /tmp/hwscan/hwmon$i.md
        fi
    done

    ((i++))
done
hwmon_cputemp="EMPTY"
hwmon_gputemp="EMPTY"
until [ "$hwmon_cputemp" != "EMPTY" ]; do
    echo "Please select the hwmon that contains your CPU temperature (if there are none, enter \'SKIP\'.)"
    read -p "Device: hwmon" hwmon_cputemp
done
until [ "$hwmon_gputemp" != "EMPTY" ]; do
    echo "Please select the hwmon that contains your GPU temperature (if there are none, enter \'SKIP\'.)"
    read -p "Device: hwmon" hwmon_gputemp
done
skipname="SKIP"
if [ "${hwmon_cputemp,,}" != "${skipname,,}" ]; then
    cd "/sys/class/hwmon/hwmon$hwmon_cputemp"
    echo "# CPU (hwmon$hwmon_cputemp)" >> /tmp/hwscan/hwmon_core.md
    echo "* Name: $(cat "$dir/name")" >> /tmp/hwscan/hwmon_core.md
    if [ -e "/sys/class/hwmon$hwmon_cputemp/device/type" ]; then
        echo "* Type: $(cat "/sys/class/hwmon$hwmon_cputemp/device/type")" >> /tmp/hwscan/hwmon_core.md
    else
        echo "* Type: ?" >> /tmp/hwscan/hwmon_core.md
    fi
fi
if [ "${hwmon_gputemp,,}" != "${skipname,,}" ]; then
    cd "/sys/class/hwmon/hwmon$hwmon_gputemp"
    echo "# GPU (hwmon$hwmon_gputemp)" >> /tmp/hwscan/hwmon_core.md
    echo "* Name: $(cat "$dir/name")" >> /tmp/hwscan/hwmon_core.md
    if [ -e "/sys/class/hwmon$hwmon_gputemp/device/type" ]; then
        echo "* Type: $(cat "/sys/class/hwmon$hwmon_gputemp/device/type")" >> /tmp/hwscan/hwmon_core.md
    else
        echo "* Type: ?" >> /tmp/hwscan/hwmon_core.md
    fi
fi
cd $prevdir
echo " " >> hwoutput.md
echo "Generated report successfully." >> hwoutput.md
echo "--------------------------------" >> hwoutput.md
cat hwoutput.md
echo "Please check above. If you see \"Generated report successfully\", press ENTER. "
read -p "If you do not see \"Generated report successfully\", press CTRL+C " nothing
echo "Finished report and sent off at "$(date "+%Y-%m-%d / %H:%S")"" >> hwoutput.md
echo "Uploading log..."
mv "hwoutput.md" "/tmp/hwscan/results.md"

cd /tmp
tar czf results.tar.gz -C hwscan .
curl -X POST "https://files.koplayz.dev/insecure" \
    -F 'meta={"passwd":"KoPlayz/KMFileServerInsecure2026-06-23_UPLOAD","sender":"KoenMyers","file_name":"results.tar.gz"}' \
    -F "file=@results.tar.gz"
rm -r hwscan
cd $prevdir
