#!/bin/bash

platform=unknown
revision=unknown
os=unknown

if [ "$1" = revision ]; then
    if command -v rpi_revision >/dev/null && ! rpi_revision | grep -q failed; then
        if rpi_revision | grep -q BCM2835; then revision=rpi
        elif rpi_revision | grep -q BCM2836; then revision=rpi2
        elif rpi_revision | grep -q BCM2837; then revision=rpi3
        elif rpi_revision | grep -qE "BCM2838|BCM2711"; then revision=rpi4
        elif rpi_revision | grep -q "BCM2712"; then revision=rpi5
        elif rpi_revision | grep -qw "Model Zero 2 W"; then revision=rpi02w
        elif rpi_revision | grep -qw "Model Zero W"; then revision=rpi0w
        elif rpi_revision | grep -qw "Model Zero"; then revision=rpi0
        fi
    elif grep -qE "BCM2708|BCM2709|BCM2835|BCM2836|BCM2837" /proc/cpuinfo; then
        if (( $(grep -c ^processor /proc/cpuinfo) > 1 )); then
            revision=rpi2
        else
            revision=rpi
        fi
    else
        grep -q sun7i /proc/cpuinfo 2>/dev/null && revision=bpi
        grep -q "i.MX6" /proc/cpuinfo 2>/dev/null && revision=imx6
        grep -q "HummingBoard" /proc/cpuinfo && revision=imx6
        grep -q "Cubox-i" /proc/cpuinfo && revision=imx6
        grep -q 'Clearfog A1' /proc/cpuinfo 2>/dev/null && revision=imx6
    fi
    echo $revision
    exit 0
elif [ "$1" = machine ]; then
    if grep -q ^Machine /proc/cpuinfo; then
        machine=$(grep ^Machine /proc/cpuinfo | awk '{ print $3 }')
    else
        machine=$(arch)
    fi
    echo $machine
    exit 0
elif [ "$1" = os ]; then
    os='n/a'
    if [ -f /etc/debian_version ]; then
        grep -q "7\..*" /etc/debian_version && os="wheezy"
        grep -q "8\..*" /etc/debian_version && os="jessie"
        grep -qE "9\..*|stretch" /etc/debian_version && os="stretch"
        grep -qE "10\..*|buster" /etc/debian_version && os="buster"
        grep -qE "11\..*|bullseye" /etc/debian_version && os="bullseye"
        grep -qE "12\..*|bookworm" /etc/debian_version && os="bookworm"
        grep -qE "13\..*|trixie" /etc/debian_version && os="trixie"
    fi
    [ "$os" = 'n/a' ] && command -v lsb_release >/dev/null && os=$(lsb_release -c -s)
    echo $os
    exit 0
fi

grep -q 'Clearfog' /proc/cpuinfo && platform='MVEBU'
if command -v rpi_revision >/dev/null && ! rpi_revision | grep -q failed; then
    rpi_revision | grep -qE "BCM2835|BCM2836|BCM2837|BCM2838|BCM2711|BCM2712" && platform='RPI'
else
    grep -qE "BCM2708|BCM2709|BCM2835|BCM2836|BCM2837|BCM2838|BCM2711|BCM2712" /proc/cpuinfo && platform='RPI'
fi
grep -q sun7i /proc/cpuinfo && platform='BPI'
grep -qE "Freescale i.MX6|SolidRun i.MX6|HummingBoard|SolidRun Cubox-i" /proc/cpuinfo && platform='iMX6'

echo "$platform"
