public/Invoke-FootballCompetitionFixtureAutomation.ps1

function Invoke-FootballCompetitionFixtureAutomation {
    <#
        .SYNOPSIS
            Retrieves predictons and results.
 
        .EXAMPLE
            Invoke-FootballCompetitionFixtureAutomation -Header $Headers `
                                                        -Token $Token `
                                                        -DateRange '2025-02-24/2025-02-28' `
                                                        -DateMonth 2 `
                                                        -DateYear 2025 `
                                                        -DaysToRun 16 `
                                                        -Type predictions `
                                                        -Path C:\sportsmonk
 
        .EXAMPLE
            Invoke-FootballCompetitionFixtureAutomation -Header $Headers `
                                                        -Token $Token `
                                                        -Competition eng-premier `
                                                        -DateRange '2025-02-24/2025-02-28' `
                                                        -DateMonth 2 `
                                                        -DateYear 2025 `
                                                        -DaysToRun 16 `
                                                        -Type results `
                                                        -Path C:\sportsmonk
 
        .INPUTS
            - [Object] FixtureList
            - [Object] Header
         
    #>

    [CmdletBinding()]
    param(  

        [Parameter(Mandatory=$true)]
        [ValidateSet('australia','europe','europe-uk','europe-uk-cup','europe-uk-fl','europe-uk-wsl','south-america','north-america','asia')]
        [string]$Continent,

        [Parameter(Mandatory=$false)]
        [ValidateNotNullOrEmpty()]
        [string]$Competition,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [int]$DateMonth,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$DateRange,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [int]$DateYear,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [int]$DaysToRun,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [Object]$Header,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$Path,

        [Parameter(Mandatory=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$Token,

        [Parameter(Mandatory=$true)]
        [ValidateSet('predictions','results')]
        [string]$Type

    )
    process{

        $ErrorActionPreference = 'Stop'

        try {

            # Get range of the fixtures
            $FixtureList =@()
            $FixtureList = Get-FixtureList -Header $Header -Token $Token -DateRange $DateRange -Continent $Continent

            if ($($FixtureList.Count) -ge 1) {

                $FixtureList | Select-Object -Property id,name,starting_at,result_info | Format-Table

                # Exclude processed fixtures
                $NewFixturesToProcess =@()
                $NewFixturesToProcess = Confirm-ProcessedFootballFixture -FixtureList $FixtureList `
                                                                         -Continent $Continent `
                                                                         -DateMonth $DateMonth `
                                                                         -DateYear $DateYear `
                                                                         -Type $Type `
                                                                         -Path $Path

                $NewFixturesToProcess | Select-Object -Property id,name,starting_at,result_info | Sort-Object -Property id -Descending | Format-Table
                $Hash1 =@{AllFixturesCount = $($AllFixtures.Count);FixtureListCount = $($FixtureList.Count)}
                $Hash1

                if ($($NewFixturesToProcess.Count) -ge 1) {

                    # Get all the predictions for the fixtures
                    $FixtureListPrediction =@()
                    $FixtureListPrediction += Get-FootballPredictionProbability -Header $Header -Token $Token -FixtureList $NewFixturesToProcess

                    # Get the competitions
                    $Competitions = $Competitions = Select-FootballCompetition -Continent $Continent
                    $Hash2 =@{CompetionCount = $($Competitions.Count)} 
                    $Hash2

                }
                else {

                    Write-Warning -Message "NewFixturesToProcessCount: $($NewFixturesToProcess.Count)"
                    break

                } # if

                if ($($FixtureListPrediction.Count) -ge 1) {

                    $Competitions.GetEnumerator() | ForEach-Object -Process {

                        Write-Warning -Message "Processing $_."
                        New-ProcessedFootballFixtureFolder -Competition $($_.Key) -DateYear $DateYear -DateMonth $DateMonth -Path $Path
                        $CompetitionMatched = $false

                        if ($($PSBoundParameters.ContainsKey('Competition'))) {

                            if ($($_.Key) -eq $Competition) {
                            
                                $CompetitionsToUse = $($_.Key)
                                $CompetitionMatched = $true

                            }
                
                        }
                        else {

                            $CompetitionsToUse = $($_.Key)
                            $CompetitionMatched = $true
                            
                        } # if

                        if ($Type -eq 'predictions' -and $CompetitionMatched) {

                            Get-FootballCompetitionPrediction -Header $Header `
                                                              -Token $Token `
                                                              -Competition $CompetitionsToUse `
                                                              -DateMonth $DateMonth `
                                                              -DateYear $DateYear `
                                                              -DaysToRun $DaysToRun `
                                                              -FixtureList $FixtureList `
                                                              -FixtureListPrediction $FixtureListPrediction `
                                                              -Path $Path

                            $identifier = Get-LeagueIdentifier -Competition $CompetitionsToUse
                            $CompetitionFixtureList = $FixtureList | Where-Object {$_.league_id -eq $identifier}
                            $PFileDateTime = Get-Date -Format FileDateTime
                            # "$Path\fixture-artifact\processed-fixtures\$DateYear\$DateMonthToUse\$Type\$Competition"
                            $PlogPath = Get-ProcessedFootballFixtureFolderPath -Competition $CompetitionsToUse -DateYear $DateYear -DateMonth $DateMonth -Type $Type -Path $Path
                            $CompetitionFixtureList | ConvertTo-Json | Set-Content -Path "$PlogPath\$PFileDateTime-$CompetitionsToUse-football-fixture-$Type.json"
                            
                        } # if

                        if ($Type -eq 'results' -and $CompetitionMatched) {

                            Get-FootballCompetitionResult -Header $Header `
                                                          -Token $Token `
                                                          -Competition $CompetitionsToUse `
                                                          -DateMonth $DateMonth `
                                                          -DateYear $DateYear `
                                                          -DaysToRun $DaysToRun `
                                                          -FixtureList $FixtureList `
                                                          -FixtureListPrediction $FixtureListPrediction  `
                                                          -Path $Path
                        
                            $identifier = Get-LeagueIdentifier -Competition $CompetitionsToUse
                            $CompetitionFixtureList = $FixtureList | Where-Object {$_.league_id -eq $identifier}
                            $RFileDateTime = Get-Date -Format FileDateTime
                            # "$Path\fixture-artifact\processed-fixtures\$DateYear\$DateMonthToUse\$Type\$Competition"
                            $RlogPath = Get-ProcessedFootballFixtureFolderPath -Competition $CompetitionsToUse -DateYear $DateYear -DateMonth $DateMonth -Type $Type -Path $Path
                            $CompetitionFixtureList | ConvertTo-Json | Set-Content -Path "$RlogPath\$RFileDateTime-$CompetitionsToUse-football-fixture-$Type.json"
                        
                        } # if
                
                    } # foreach-object

                    $FixtureList  | Select-Object -Property league_id,name,starting_at

                } # if

            } # if

        }
        catch {

            $_.Exception.Message

        } # try catch

    } # process

} # function