Covid19Stats.psm1

<#
    ===========================================================================
     Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
     Created on: 4/4/2020 8:06 PM
     Created by: DataTraveler1
     Organization:
     Filename: Covid19Stats.psm1
    -------------------------------------------------------------------------
     Module Name: Covid19Stats
    ===========================================================================
#>


function Get-Covid19Stats
{
    [CmdletBinding()]
    Param (
        [switch]$help,
        [switch]$global,
        [string]$country,
        [string]$state
    )
    function Send-API-Command
    {
        [CmdletBinding()]
        Param (
            [Parameter(Mandatory = $true)]
            [string]$command
        )
        $uri = ($covid_api_base_url + $command)
        $Error.Clear()
        Try
        {
            If ($debug_mode -eq $true)
            {
                Write-Host "Debug: Sending API command [GET] to [$uri]"
            }
            $api_response = Microsoft.PowerShell.Utility\Invoke-RestMethod -Uri $uri -Method "GET"
        }
        Catch
        {
            Write-Host ("Error - " + $Error.Exception.Message)
            Exit
        }
        Return $api_response
    }
    
    function Get-Cover19Stats_Global
    {
        $api_results = Send-API-Command -command "all"
        Return $api_results
    }
    
    function Get-Cover19Stats_Countries
    {
        $api_results = Send-API-Command -command "countries"
        Return $api_results
    }
    
    function Get-Country
    {
        [CmdletBinding()]
        Param (
            [Parameter(Mandatory = $true)]
            [string]$country_name
        )
        If ($country_name -eq "United States" -or $country_name -eq "United States of America") { $country_name = "USA" }
        $country_data = Get-Cover19Stats_Countries
        $country_stats = $country_data | Where-Object { $_.country -eq $country_name }
        Return $country_stats
    }
    
    function Get-Cover19Stats_States
    {
        $api_results = Send-API-Command -command "states"
        Return $api_results
    }
    
    function Get-State
    {
        [CmdletBinding()]
        Param (
            [Parameter(Mandatory = $true)]
            [string]$state_name
        )
        $state_data = Get-Cover19Stats_States
        $state_stats = $state_data | Where-Object { $_.state -eq $state_name }
        Return $state_stats
    }
    
    function Convert-UnixTime
    {
        [CmdletBinding()]
        Param (
            [double]$unix_time
        )
        $utc_time = (Get-Date -Date '1970/1/1').AddMilliseconds($unix_time)
        $local_time = (Get-Date -Date $utc_time).AddMinutes($timezone_utc_offset_minutes)
        $local_time_formatted = Get-Date -Date $local_time -Format "yyyy-MM-dd HH:mm:ss"
        Return $local_time_formatted
    }
    
    $debug_mode = [boolean]$false
    $covid_api_base_url = [string]"https://corona.lmao.ninja/"
    $timezone = Get-TimeZone
    $timezone_utc_offset_minutes = $timezone.BaseUtcOffset.totalminutes
    $timezone_dst = $timezone.SupportsDaylightSavingTime
    If ($timezone_dst -eq $true) { $timezone_utc_offset_minutes = $timezone_utc_offset_minutes + 60 }
    
    If ($help -eq $true)
    {
        Write-Host "Examples:"
        Write-Host ""
        Write-Host ""
        Write-Host 'Get-Covid19Stats -global'
        Write-Host 'Get-Covid19Stats -country "USA"'
        Write-Host 'Get-Covid19Stats -country "China"'
        Write-Host 'Get-Covid19Stats -state "North Dakota"'
        Write-Host 'Get-Covid19Stats -state "Florida"'
        Write-Host ""
        Return
    }
    ElseIf ($global -eq $true)
    {
        $output = Get-Cover19Stats_Global
        $new_output = @{ cases = ("{0:N0}" -f ($output.cases)); deaths = ("{0:N0}" -f ($output.deaths)); recovered = ("{0:N0}" -f ($output.recovered)); updated = (Convert-UnixTime -unix_time ([double]$output.updated)); }
        
        $final_output = "Cases: " + [string]$new_output.cases + " Recovered: " + [string]$new_output.recovered + " Deaths: " + [string]$new_output.deaths + " Updated: " + $new_output.updated
    }
    ElseIf ($country.length -gt 0)
    {
        $country_data = Get-Cover19Stats_Countries
        $country_stats = Get-Country -country_name $country
        $new_output = @{ country = ($country_stats.country); cases = "{0:N0}" -f ($country_stats.cases); todayCases = "{0:N0}" -f ($country_stats.todayCases); deaths = "{0:N0}" -f ($country_stats.deaths); todayDeaths = "{0:N0}" -f ($country_stats.todayDeaths); recovered = "{0:N0}" -f ($country_stats.recovered); active = "{0:N0}" -f ($country_stats.active); critical = "{0:N0}" -f ($country_stats.critical); casesPerOneMillion = "{0:N0}" -f ($country_stats.casesPerOneMillion); }
        If (($country_stats.country.length -gt 0))
        {
            $final_output = "Country: " + $new_output.country + " Cases: " + $new_output.cases + " Today-Cases: " + $new_output.todayCases + " Deaths: " + $new_output.deaths + " Today-Deaths: " + $new_output.todayDeaths + " Recovered: " + $new_output.recovered + " Active: " + $new_output.active + " Critical: " + $new_output.critical + " Cases-Per-One-Million: " + $new_output.casesPerOneMillion
        }
        Else
        {
            $final_output = "Invalid data received. Try again"
        }
        
    }
    ElseIf ($state.length -gt 0)
    {
        $state_data = Get-Cover19Stats_States
        $state_stats = Get-State -state_name $state
        $new_output = @{ state = ($state_stats.state); cases = "{0:N0}" -f ($state_stats.cases); todayCases = "{0:N0}" -f ($state_stats.todayCases); deaths = "{0:N0}" -f ($state_stats.deaths); todayDeaths = "{0:N0}" -f ($state_stats.todayDeaths); recovered = "{0:N0}" -f ($state_stats.recovered); active = "{0:N0}" -f ($state_stats.active); }
        If (($state_stats.state.length -gt 0))
        {
            $final_output = "State: " + $new_output.state + " Cases: " + $new_output.cases + " Today-Cases: " + $new_output.todayCases + " Deaths: " + $new_output.deaths + " Today-Deaths: " + $new_output.todayDeaths + " Recovered: " + $new_output.recovered + " Active: " + $new_output.active
        }
        Else
        {
            $final_output = "Invalid data received. Try again"
        }
    }
    $current_date = Get-Date -Format "[yyyy-MM-dd HH:mm:ss] "
    $final_output = ( $current_date + $final_output)
    Return $final_output
}