public/Confirm-ProcessedFootballFixture.ps1

function Confirm-ProcessedFootballFixture {
    <#
        .SYNOPSIS
            Confirm-ProcessedFootballFixture -FixtureList $AllFixtures -Continent asia -DateMonth 3 -DateYear 2025 -Type predictions -Path C:\sportsmonk
 
    #>

    [CmdletBinding()]
    param(

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

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

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

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

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

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

    )
    process{

        $ErrorActionPreference = 'Stop'

        try {

            if ($DateMonth -lt 10) {

                $DateMonthToUse = "0$DateMonth"

            }
            else {

                $DateMonthToUse = $DateMonth

            } # if

            if ($Type -eq 'predictions') {

                $UniqueFixtures =@()
                $ProcessedFixtures =@()
                $ProcessedFilesPath = "$Path\fixture-artifact\processed-fixtures\$DateYear\$DateMonthToUse\$Type"
                $ProcessedFilesPathExists = Test-Path -Path $ProcessedFilesPath

                if ($ProcessedFilesPathExists) {
                
                    $ProcessedFiles = Get-ChildItem -Path $ProcessedFilesPath -Recurse -File

                } # if

                if ($($ProcessedFiles.Count) -gt 1) {

                    foreach ($FixtureToProcess in $FixtureList) {

                        foreach ($ProcessedFile in $ProcessedFiles) {
                    
                            # Read and convert the JSON content from the file
                            $ProcessedFixtureList = Get-Content -Path $($ProcessedFile.FullName) | ConvertFrom-Json
                
                            # Check if the fixture id exists in the processed fixture list
                            if ($($ProcessedFixtureList.id) -contains $($FixtureToProcess.id)) {
                    
                                Write-Warning "Fixture Processed: $($FixtureToProcess.id) $($FixtureToProcess.Name)."
                                $ProcessedFixtures += $FixtureToProcess
                    
                            } # if

                        } # foreach

                    } # foreach

                }
                else {

                    $UniqueFixtures = $FixtureList | Select-Object -Property * -Unique
                    return $UniqueFixtures

                } # if

                foreach ($FixtureToProcess in $FixtureList) {

                    if ($($ProcessedFixtures.Id) -notcontains $($FixtureToProcess.id)) {
    
                        $FixtureToProcess
    
                    } #if
    
                } # if

            } # if

            if ($Type -eq 'results') {

                $ProcessedFixtures =@()
                $Competitions = Select-FootballCompetition -Continent $Continent
                $Competitions.GetEnumerator() | ForEach-Object -Process {

                    Write-Warning -Message "$($_.key) - $DateYear - $DateMonthToUse"
                    $ResultFiles = Get-ChildItem -Path "$Path\sportsmonk-results\$($_.key)" -Recurse -File | Where-Object {$_.Name -like "*$DateYear-$DateMonthToUse*"}

                    if ($($ResultFiles.count) -ge 1) {

                        foreach ($FixtureToProcess in $FixtureList) {

                            foreach ($ResultFile in $ResultFiles) {

                                $Date = [regex]::Match($($ResultFile.FullName), '\d{4}-\d{2}-\d{2}').Value

                                Write-Warning -Message "Processing: $($FixtureToProcess.Name) $($FixtureToProcess.starting_at)"
                                Write-Warning -Message "Processing: $Date - $($ResultFile.FullName)"

                                $NoResultsExist = Confirm-FootballFixtureResult -Competition $($_.key) -Date $Date -Path $Path

                                if ($NoResultsExist) {

                                    $ProcessedFixtures += $FixtureToProcess

                                } # if

                            } # foreach

                        } # foreach

                    }
                    else {

                        $ProcessedFixtures += $FixtureList

                    } # if

                } # foreach-object

                $UniqueFixtures = $ProcessedFixtures | Select-Object -Property * -Unique
                return $UniqueFixtures

            } # if

        }
        catch {

            "$($MyInvocation.MyCommand.Name): $_.Exception.Message"
 
         } # trycatch

    } # process

} # function