Find-CrimeUK.psm1

<#
.Synopsis
   UK Police API
.DESCRIPTION
   Do you like to fight crime? Okay how about do you like to find crime? Well now you can, maybe you want to know how much
   crime is in your area, maybe you looking to move to a new place in the UK but do not know the local crime scene. Maybe
   you a gangster and want to see how little crime there is in a given area to then go cause some mayhem. Well what-ever
   your reasons, you too can now be a crime investigator, by finding crime and the outcome if the police have bothered to
   update it. Finally for me this was amazing to see all the unsolved crime in my area, broken Britain at its best.
.EXAMPLE
   Find-CrimeUK -Town Gosport -Year 2022 -Month 02
.EXAMPLE
   Find-CrimeUK -City Portsmouth -Year 2022 -Month 03
.EXAMPLE
   Find-CrimeUK -LocationName Bridgemary -Year 2020 -Month 01
.NOTES
   Information on crime in the UK from the UK Police API
.COMPONENT
   The component this cmdlet belongs to Adam Bacon
.ROLE
   The role this cmdlet belongs to is the people of the UK to see how bad crime is in your area
.FUNCTIONALITY
   Allows you to easily find the crime in your area of the UK via a location name
#>

function Find-CrimeUK {
   [CmdletBinding()]
   Param
   (
      [Parameter(Mandatory = $true,
         Position = 0,
         HelpMessage = "Type the location name of interest such as Gosport or maybe a location in Gosport, like Alverstoke. Keep this to a single word"
      )]
      [Alias("Town")]
      [Alias("City")]
      [Alias("Village")]
      [string]$LocationName,
      [Parameter(Mandatory = $true)]
      [ValidateSet("2020", "2021", "2022")]
      [string]$Year,
      [Parameter(Mandatory = $true)]
      [ValidateSet("01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12")]
      [string]$Month
   )

   Begin {
      Write-Verbose -Message "Obtaining the latitude and longitude of the location entered"
      $place = Invoke-RestMethod "https://geocode.maps.co/search?q={$LocationName}"
      if ($place.lat.count -gt 1) {
         $placeLat = $place.lat[0]
         $placeLon = $place.lon[0]
      }
      else {
         $placeLat = $place.lat
         $placeLon = $place.lon
      }
   }
   Process {
      try {
         $crime = Invoke-RestMethod "https://data.police.uk/api/crimes-street/all-crime?lat=$placeLat&lng=$placeLon&date=$Year-$Month" -ErrorAction Stop
         $crime | Out-GridView
      }
      catch {
         Write-Warning "Crumbs something went wrong most likely an invalid location name $($_)"
      }
   }
   End {
      Write-Verbose -Message "Script Finished $(Get-Date)"
   }
}