#!/bin/bash

# Colors
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
NC='\033[0m'

clear
echo -e "${BLUE}=========================================${NC}"
echo -e "${GREEN}       SERVER INFORMATION REPORT         ${NC}"
echo -e "${BLUE}=========================================${NC}"
echo ""

# ---------- RAM INFO ----------
echo -e "${CYAN}>>> RAM DETAILS${NC}"
echo "-----------------------------------------"
TOTAL_RAM=$(free -h | awk '/^Mem:/ {print $2}')
USED_RAM=$(free -h | awk '/^Mem:/ {print $3}')
FREE_RAM=$(free -h | awk '/^Mem:/ {print $4}')
AVAIL_RAM=$(free -h | awk '/^Mem:/ {print $7}')
echo -e "Total RAM     : ${GREEN}$TOTAL_RAM${NC}"
echo -e "Used RAM      : ${YELLOW}$USED_RAM${NC}"
echo -e "Free RAM      : ${GREEN}$FREE_RAM${NC}"
echo -e "Available RAM : ${GREEN}$AVAIL_RAM${NC}"
echo ""

# ---------- CPU INFO ----------
echo -e "${CYAN}>>> CPU DETAILS${NC}"
echo "-----------------------------------------"
CPU_MODEL=$(lscpu | grep "Model name" | sed 's/Model name:\s*//')
CPU_CORES=$(nproc)
echo -e "CPU Model : ${GREEN}$CPU_MODEL${NC}"
echo -e "CPU Cores : ${GREEN}$CPU_CORES${NC}"
echo ""

# ---------- DISK INFO ----------
echo -e "${CYAN}>>> DISK / STORAGE DETAILS${NC}"
echo "-----------------------------------------"
echo -e "${YELLOW}Filesystem      Size  Used  Avail  Use%  Mounted${NC}"
df -h --output=source,size,used,avail,pcent,target | grep -v "tmpfs" | grep -v "udev"
echo ""

# ---------- DISK TYPE DETECTION ----------
echo -e "${CYAN}>>> DISK TYPE (NVMe / SSD / HDD)${NC}"
echo "-----------------------------------------"

for DISK in $(lsblk -d -n -o NAME | grep -E "^(sd|nvme|vd|hd)"); do
    DEV="/dev/$DISK"
    SIZE=$(lsblk -d -n -o SIZE $DEV)
    MODEL=$(lsblk -d -n -o MODEL $DEV 2>/dev/null | xargs)
    ROTA=$(cat /sys/block/$DISK/queue/rotational 2>/dev/null)

    # Detect type
    if [[ "$DISK" == nvme* ]]; then
        TYPE="NVMe SSD ⚡"
    elif [[ "$ROTA" == "0" ]]; then
        TYPE="SSD 💾"
    elif [[ "$ROTA" == "1" ]]; then
        TYPE="HDD 🗄️"
    else
        TYPE="Unknown"
    fi

    echo -e "Disk     : ${GREEN}/dev/$DISK${NC}"
    echo -e "Type     : ${YELLOW}$TYPE${NC}"
    echo -e "Size     : ${GREEN}$SIZE${NC}"
    echo -e "Model    : $MODEL"
    echo "-----------------------------------------"
done

# ---------- PARTITIONS ----------
echo ""
echo -e "${CYAN}>>> PARTITIONS${NC}"
echo "-----------------------------------------"
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,FSTYPE
echo ""

echo -e "${BLUE}=========================================${NC}"
echo -e "${GREEN}            Report Complete              ${NC}"
echo -e "${BLUE}=========================================${NC}"