ud-bginfo.psm1

function New-UDProgressMetric {
    param($Total, $Value, $Metric, $Label, [Switch]$HighIsGood)

    $Percent = [Math]::Round(($Value / $Total) * 100)
    New-UDElement -Tag "h5" -Content { $Label }

    New-UDElement -Tag "div" -Attributes @{ className = "row" } -Content {
        New-UDElement -Tag "span" -Attributes @{ className = "grey-text lighten-1" } -Content { "$Percent% - $($Value.ToString('N')) of $($Total.ToString('N')) $Metric" }
    } 

    if ($HighIsGood) {
        if ($Percent -lt 20) {
            $Color = 'red'
        }
        elseif ($Percent -gt 25 -and $Percent -lt 75) {
            $Color = 'yellow'
        } else {
            $Color = 'green'
        }
    
    } else {
        if ($Percent -lt 50) {
            $Color = 'green'
        }
        elseif ($Percent -gt 50 -and $Percent -lt 75) {
            $Color = 'yellow'
        } else {
            $Color = 'red'
        }
    
    }


    New-UDElement -Tag "div" -Attributes @{ className = 'progress grey' } -Content {
        New-UDElement -Tag "div" -Attributes @{ className = "determinate $color"; style = @{ width = "$Percent%"} }
    }    
}

function New-UDProgress {
    param($Percent, $Label)

    New-UDElement -Tag "h5" -Content { $Label }

    if ($Percent -lt 50) {
        $Color = 'green'
    }
    elseif ($Percent -gt 50 -and $Percent -lt 75) {
        $Color = 'yellow'
    } else {
        $Color = 'red'
    }

    New-UDElement -Tag "div" -Attributes @{ className = "row" } -Content {
        New-UDElement -Tag "span" -Attributes @{ className = "grey-text lighten-1" } -Content { "$Percent%" }
    } 

    New-UDElement -Tag "div" -Attributes @{ className = 'progress grey' } -Content {
        New-UDElement -Tag "div" -Attributes @{ className = "determinate $color"; style = @{ width = "$Percent%"} }
    }    
}

function ConvertTo-Fahrenheit {
    param($Value)

    (($value /10 -273.15) *1.8 +32)
}

function New-HardwareCard {
    $CPU = Get-WMIObject -Class Win32_Processor
    $drives = Get-WMIObject -Class win32_diskdrive


    New-UDCard -Title "Hardware" -Content {
        New-UDLayout -Columns 1 -Content {
            New-UDElement -Tag "div" -Content {
                " CPU: $($CPU.Name)"
            }
            foreach($drive in $drives) {
                New-UDElement -Tag "div" -Content {
                    " Drive: $($drive.caption)"
                }
            }
        }
    }
}

function New-OverviewCard {
    $OS = Get-WMIObject -Class Win32_OperatingSystem
    
    
    New-UDCard -Title "$Env:ComputerName Overview" -Content {
        New-UDLayout -Columns 1 -Content {
            New-UDElement -Tag "div" -Content {
                " Boot Time: $($OS.ConvertToDateTime($OS.LastBootupTime))"
            }
            New-UDElement -Tag "div" -Content {
                " OS: $($OS.Caption)"
            }
            New-UDElement -Tag "div" -Content {
                " Logon Server: $Env:LOGONSERVER"
            }
            New-UDElement -Tag "div" -Content {
                " User Domain: $Env:USERDOMAIN"
            }
            New-UDElement -Tag "div" -Content {
                " Username: $Env:USERNAME"
            }
        }
    }
}

function New-NetworkCard {
    $EnabledAdapters = (Get-wmiObject Win32_networkAdapterConfiguration | ?{$_.IPEnabled})
    $DefaultGateway = $EnabledAdapters.DefaultIPGateway | Where-Object { -not [String]::IsNullOrEmpty($_)}
    $DHCPServer = $EnabledAdapters.DHCPServer | Where-Object { -not [String]::IsNullOrEmpty($_)}
    $IPAddress = $EnabledAdapters.IPAddress | Where-Object { -not [String]::IsNullOrEmpty($_)}
    $DNSServer = $EnabledAdapters.DNSServerSearchOrder | Where-Object { -not [String]::IsNullOrEmpty($_)}

    New-UDCard -Title "Network" -Content {
        New-UDLayout -Columns 1 -Content {
            New-UDElement -Tag "div" -Content {
                $IPAddress = [String]::Join(', ', $IPAddress)
                " IP Address: $IPAddress "
            }
            New-UDElement -Tag "div" -Content {
                $DefaultGateway = [String]::Join(', ', $DefaultGateway)
                " Default Gateway: $DefaultGateway"
            }
            New-UDElement -Tag "div" -Content {
                " DHCP Server: $DHCPServer"
            }
            New-UDElement -Tag "div" -Content {
                $DNSServer = [String]::Join(', ', $DNSServer)
                " DNS Server: $DNSServer"
            }
        }
    }
}

function New-StorageCard {
    $Disks = Get-WMIObject -Class Win32_LogicalDisk

    New-UDCard -Title 'Storage' -Content {
        foreach($disk in $disks) {
            New-UDElement -Tag "row" -Content {
                New-UDProgressMetric -Value ($Disk.FreeSpace /1GB) -Total ($Disk.Size / 1GB) -Metric "GBs" -Label "$($Disk.DeviceID) - Free Space" -HighIsGood
            }
        }
    }
}

function New-Resource {
    $OperatingSystem = Get-WMIObject -Class Win32_OperatingSystem
    $CPU = Get-WMIObject -Class Win32_Processor
    

    New-UDCard -Title "Host" -Content {
        New-UDElement -tag "h4" -Content {
            "System Information"
        }
        New-UDElement -tag "div" -Attributes @{ className = "row"} -Content {
            New-UDElement -Tag "i" -Attributes @{ className = "fa fa-windows"}
            " "
            $OperatingSystem.Caption 
        }
        New-UDElement -Tag "div" -Attributes @{ className = "row"} -Content {
            New-UDProgressMetric -Value ($OperatingSystem.FreePhysicalMemory /1MB) -Total ($OperatingSystem.TotalVisibleMemorySize / 1MB) -Metric "GBs" -Label "Memory"
        }
        New-UDElement -Tag "div" -Attributes @{ className = "row"} -Content {
            New-UDProgress -Percent $CPU.LoadPercentage -Label "CPU Usage"
        }

        
    }
}