dashboards/HerdManager/pages/SystemSettings.ps1

$systemSettings = New-UDPage -Name 'System Settings' -Url '/settings' -Content {
    New-UDCard -Title 'System Settings' -Content {
        # Load current settings
        $session:sys = Get-SystemInfo

        New-UDForm -Id 'system-settings-form' -OnSubmit {
            $farmName = $EventData.'farm-name'
            $address = $EventData.'address'
            $city = $EventData.'city'
            $state = $EventData.'state'
            $zip = $EventData.'zip'
            $phone = $EventData.'phone'
            $email = $EventData.'email'
            $contact = $EventData.'contact'
            $notes = $EventData.'notes'
            $currency = $EventData.'default-currency'
            $culture = $EventData.'default-culture'
            $established = $EventData.established
                        
            try {

                # Build parameters and only include Established when provided
                $params = @{
                    FarmName        = $farmName
                    Address         = $address
                    City            = $city
                    State           = $state
                    ZipCode         = $zip
                    PhoneNumber     = $phone
                    Email           = $email
                    ContactPerson   = $contact
                    Notes           = $notes
                    DefaultCurrency = $currency
                    DefaultCulture  = $culture
                    Established     = $established
                }


                Set-SystemInfo @params | Out-Null
                Show-UDToast -Message 'System settings saved' -MessageColor green
                Sync-UDElement -Id 'system-info-display'
            }
            catch {
                Show-UDToast -Message "Failed to save system settings: $($_.Exception.Message)" -MessageColor red -Duration 5000
            }
        } -Content {
            New-UDTextbox -Id 'farm-name' -Label 'Farm Name' -Value $session:sys.FarmName -FullWidth
            New-UDTextbox -Id 'address' -Label 'Address' -Value $session:sys.Address -FullWidth
            New-UDGrid -Container -Spacing 2 -Content {
                New-UDGrid -Item -SmallSize 6 -Content { New-UDTextbox -Id 'city' -Label 'City' -Value $session:sys.City }
                New-UDGrid -Item -SmallSize 6 -Content { New-UDTextbox -Id 'state' -Label 'State' -Value $session:sys.State }
            }
            New-UDGrid -Container -Spacing 2 -Content {
                New-UDGrid -Item -SmallSize 6 -Content { New-UDTextbox -Id 'zip' -Label 'Zip Code' -Value $session:sys.ZipCode }
                New-UDGrid -Item -SmallSize 6 -Content { New-UDTextbox -Id 'phone' -Label 'Phone' -Value $session:sys.PhoneNumber }
            }
            New-UDTextbox -Id 'email' -Label 'Email' -Value $session:sys.Email -FullWidth
            New-UDTextbox -Id 'contact' -Label 'Contact Person' -Value $session:sys.ContactPerson -FullWidth
            $parsedEstablished = if ($session:sys.Established) { 
                (Parse-Date $session:sys.Established).Year.ToString() 
            } 
            else {
                (Get-Date).Year
            } 
            New-UDTextbox -Id 'established' -Label 'Established' -Value $parsedEstablished  -FullWidth
            New-UDTextbox -Id 'notes' -Label 'Notes' -Value $session:sys.Notes -FullWidth -Multiline -Rows 3

            New-UDGrid -Container -Spacing 2 -Content {
                New-UDGrid -Item -SmallSize 6 -Content {
                    New-UDSelect -Id 'default-currency' -Label 'Default Currency' -DefaultValue ($session:sys.DefaultCurrency -or 'USD') -Option {
                        New-UDSelectOption -Name 'USD ($)' -Value 'USD'
                        New-UDSelectOption -Name 'GBP (£)' -Value 'GBP'
                        New-UDSelectOption -Name 'EUR (€)' -Value 'EUR'
                        New-UDSelectOption -Name 'CAD ($)' -Value 'CAD'
                        New-UDSelectOption -Name 'AUD ($)' -Value 'AUD'
                    }
                }
                New-UDGrid -Item -SmallSize 6 -Content {
                    New-UDSelect -Id 'default-culture' -Label 'Default Culture' -DefaultValue ($session:sys.DefaultCulture -or 'en-US') -Option {
                        New-UDSelectOption -Name 'en-US' -Value 'en-US'
                        New-UDSelectOption -Name 'en-GB' -Value 'en-GB'
                        New-UDSelectOption -Name 'fr-FR' -Value 'fr-FR'
                        New-UDSelectOption -Name 'en-CA' -Value 'en-CA'
                        New-UDSelectOption -Name 'en-AU' -Value 'en-AU'
                    }
                }
            }

            New-UDElement -Tag 'br'
        }

        New-UDElement -Tag 'br'

        # Reset / Clear System Settings
        New-UDButton -Text 'Reset System Settings' -Variant outlined -Style @{color = '#d32f2f'; borderColor = '#d32f2f' } -OnClick {
            Show-UDModal -Content {
                New-UDTypography -Text '⚠️ Reset System Settings' -Variant h5 -Style @{color = '#d32f2f'; marginBottom = '12px' }
                New-UDTypography -Text 'This will clear all global system settings and return the application to an unconfigured state. This action cannot be undone.' -Variant body2
            } -Footer {
                New-UDButton -Text 'Cancel' -OnClick { Hide-UDModal }
                New-UDButton -Text 'Reset' -Variant contained -Style @{backgroundColor = '#d32f2f'; color = 'white' } -OnClick {
                    try {
                        Clear-SystemInfo -Force | Out-Null
                        Show-UDToast -Message 'System settings cleared' -MessageColor green
                        Hide-UDModal
                        Sync-UDElement -Id 'system-info-display'

                        # Clear form fields
                        Set-UDElement -Id 'farm-name' -Properties @{value = '' }
                        Set-UDElement -Id 'address' -Properties @{value = '' }
                        Set-UDElement -Id 'city' -Properties @{value = '' }
                        Set-UDElement -Id 'state' -Properties @{value = '' }
                        Set-UDElement -Id 'zip' -Properties @{value = '' }
                        Set-UDElement -Id 'phone' -Properties @{value = '' }
                        Set-UDElement -Id 'email' -Properties @{value = '' }
                        Set-UDElement -Id 'contact' -Properties @{value = '' }
                        Set-UDElement -Id 'established' -Properties @{value = '' }
                        Set-UDElement -Id 'notes' -Properties @{value = '' }
                        Set-UDElement -Id 'default-currency' -Properties @{value = 'USD' }
                        Set-UDElement -Id 'default-culture' -Properties @{value = 'en-US' }
                    }
                    catch {
                        Show-UDToast -Message "Error clearing settings: $($_.Exception.Message)" -MessageColor red
                    }
                }
            }
        }

        New-UDDynamic -Id 'system-info-display' -Content {
            New-UDCard -Title 'Current System Info' -Content {
                $s = Get-SystemInfo
                if ($s) {
                    New-UDTypography -Text "Farm: $($s.FarmName)" -Variant body1
                    New-UDTypography -Text "Address: $($s.Address) $($s.City) $($s.State) $($s.ZipCode)" -Variant body2
                    New-UDTypography -Text "Phone: $($s.PhoneNumber) | Email: $($s.Email)" -Variant body2
                    New-UDTypography -Text "Contact: $($s.ContactPerson)" -Variant body2
                    New-UDTypography -Text "Established: $(if ($s.Established) { (Parse-Date $s.Established).Year } else { '' })" -Variant body2
                    New-UDTypography -Text "Currency/Culture: $($s.DefaultCurrency)/$($s.DefaultCulture)" -Variant body2
                }
                else {
                    New-UDTypography -Text 'No system settings configured yet.' -Variant body2
                }
            }
        }
    }
}