en-us/strings.psd1

# This is where the strings go, that are written by
# Write-PSFMessage, Stop-PSFFunction or the PSFramework validation scriptblocks
@{
    # Import-DevDirectoryList
    'ImportDevDirectoryList.Start'                       = "Starting Import-DevDirectoryList from path: '{0}', Format: '{1}'"
    'ImportDevDirectoryList.ConfigurationFormatExplicit' = "Using explicitly specified format: '{0}'"
    'ImportDevDirectoryList.ConfigurationFormatDefault'  = "Using default format from configuration: '{0}'"
    'ImportDevDirectoryList.FileNotFound'                = "The specified repository list file '{0}' does not exist."
    'ImportDevDirectoryList.FileNotFoundWarning'         = "Import file not found: '{0}'"
    'ImportDevDirectoryList.Import'                      = "Reading repository list from: '{0}'"
    'ImportDevDirectoryList.InferFormatFailed'           = "Unable to infer import format from path '{0}'. Specify the Format parameter."
    'ImportDevDirectoryList.FormatResolved'              = "Resolved import format: '{0}'"
    'ImportDevDirectoryList.DeserializationStart'        = "Starting deserialization from {0} format"
    'ImportDevDirectoryList.DeserializationCSV'          = "Using Import-Csv for CSV deserialization"
    'ImportDevDirectoryList.TypeConversionCSV'           = "Imported {0} objects from CSV, performing type conversions"
    'ImportDevDirectoryList.StatusDateParsed'            = "Successfully parsed StatusDate: '{0}'"
    'ImportDevDirectoryList.CompleteCSV'                 = "Successfully imported {0} repositories from CSV file"
    'ImportDevDirectoryList.DeserializationJSON'         = "Using ConvertFrom-Json for JSON deserialization"
    'ImportDevDirectoryList.EmptyJSON'                   = "JSON file is empty or contains only whitespace"
    'ImportDevDirectoryList.TypeConversionJSON'          = "Imported {0} objects from JSON, adding type information"
    'ImportDevDirectoryList.CompleteJSON'                = "Successfully imported {0} repositories from JSON file"
    'ImportDevDirectoryList.DeserializationXML'          = "Using Import-Clixml for XML deserialization"
    'ImportDevDirectoryList.TypeConversionXML'           = "Imported {0} objects from XML, adding type information"
    'ImportDevDirectoryList.CompleteXML'                 = "Successfully imported {0} repositories from XML file"

    # Export-DevDirectoryList
    'ExportDevDirectoryList.Start'                       = "Starting Export-DevDirectoryList to path: '{0}', Format: '{1}'"
    'ExportDevDirectoryList.ConfigurationFormatExplicit' = "Using explicitly specified format: '{0}'"
    'ExportDevDirectoryList.ConfigurationFormatDefault'  = "Using default format from configuration: '{0}'"
    'ExportDevDirectoryList.CollectObject'               = "Collecting repository object into export list"
    'ExportDevDirectoryList.ProcessExport'               = "Processing export of {0} repository objects"
    'ExportDevDirectoryList.NoRepositoryEntries'         = 'No repository entries received for export.'
    'ExportDevDirectoryList.FormatResolved'              = "Resolved export format: '{0}'"
    'ExportDevDirectoryList.CreateOutputDirectory'       = "Creating output directory: '{0}'"
    'ExportDevDirectoryList.ActionExport'                = 'Export repository list as {0}'
    'ExportDevDirectoryList.ExportCanceled'              = "Export canceled by user (WhatIf/Confirm)"
    'ExportDevDirectoryList.SerializationStart'          = "Serializing {0} repositories to '{1}' in {2} format"
    'ExportDevDirectoryList.SerializationCSV'            = "Using Export-Csv for CSV serialization"
    'ExportDevDirectoryList.SerializationJSON'           = "Using ConvertTo-Json with depth 5 for JSON serialization"
    'ExportDevDirectoryList.SerializationXML'            = "Using Export-Clixml for XML serialization"
    'ExportDevDirectoryList.Complete'                    = "Successfully exported {0} repositories to '{1}' in {2} format"

    # Get-DevDirectory
    'GetDevDirectory.Start'                              = "Starting Get-DevDirectory with RootPath: '{0}', SkipRemoteCheck: {1}"
    'GetDevDirectory.ConfigurationRemoteName'            = "Using remote name '{0}' from configuration"
    'GetDevDirectory.ScanStart'                          = "Scanning directory tree starting at: '{0}'"
    'GetDevDirectory.RepositoryFound'                    = "Found repository at: '{0}'"
    'GetDevDirectory.RemoteCheckStart'                   = "Checking remote accessibility for: '{0}'"
    'GetDevDirectory.RemoteCheckResult'                  = "Remote accessibility for '{0}': {1}"
    'GetDevDirectory.RemoteCheckNoUrl'                   = "No remote URL found for '{0}', marking as inaccessible"
    'GetDevDirectory.DirectoryEnumerationFailed'         = 'Skipping directory {0} due to {1}.'
    'GetDevDirectory.ScanComplete'                       = "Repository scan completed. Found {0} repositories"

    # Restore-DevDirectory
    'RestoreDevDirectory.Start'                          = "Starting Restore-DevDirectory to destination: '{0}', Force: {1}, SkipExisting: {2}, ShowGitOutput: {3}"
    'RestoreDevDirectory.ConfigurationGitExe'            = "Using git executable: '{0}'"
    'RestoreDevDirectory.GitExeResolved'                 = "Git executable resolved to: '{0}'"
    'RestoreDevDirectory.GitExeNotFound'                 = "Git executable not found: '{0}'"
    'RestoreDevDirectory.GitExecutableMissing'           = "Unable to locate the git executable '{0}'. Ensure Git is installed and available in PATH."
    'RestoreDevDirectory.DestinationNormalized'          = "Normalized destination path: '{0}'"
    'RestoreDevDirectory.ProcessingRepositories'         = "Processing {0} repositories for restore"
    'RestoreDevDirectory.MissingRemoteUrl'               = 'Skipping repository with missing RemoteUrl: {0}.'
    'RestoreDevDirectory.MissingRelativePath'            = 'Skipping repository with missing RelativePath for remote {0}.'
    'RestoreDevDirectory.UnsafeRelativePath'             = "Skipping repository with unsafe relative path '{0}'."
    'RestoreDevDirectory.OutOfScopePath'                 = "Skipping repository with out-of-scope path '{0}'."
    'RestoreDevDirectory.ExistingTargetVerbose'          = 'Skipping existing repository target {0}.'
    'RestoreDevDirectory.TargetExistsWarning'            = 'Target directory {0} already exists. Use -Force to overwrite or -SkipExisting to ignore.'
    'RestoreDevDirectory.ActionClone'                    = 'Clone repository from {0}'
    'RestoreDevDirectory.CloneFailed'                    = "git clone for '{0}' failed with exit code {1}."
    'RestoreDevDirectory.ConfigFailed'                   = "Failed to set git config {0} to '{1}' for repository at {2}. Exit code: {3}"
    'RestoreDevDirectory.InaccessibleRemoteSkipped'      = "Skipping repository '{0}' with inaccessible remote: {1}"
    'RestoreDevDirectory.Complete'                       = "Restore operation completed. Processed {0} repositories"

    # Sync-DevDirectoryList
    'SyncDevDirectoryList.Start'                         = "Starting Sync-DevDirectoryList with DirectoryPath: '{0}', RepositoryListPath: '{1}', Force: {2}, SkipExisting: {3}, ShowGitOutput: {4}"
    'SyncDevDirectoryList.ConfigurationRemoteName'       = "Using remote name '{0}' from configuration"
    'SyncDevDirectoryList.DirectoryNormalized'           = "Normalized directory path: '{0}'"
    'SyncDevDirectoryList.SyncStart'                     = "Starting synchronization process"
    'SyncDevDirectoryList.ImportingFromFile'             = "Repository list file exists, importing entries from: '{0}'"
    'SyncDevDirectoryList.ActionCreateRootDirectory'     = 'Create repository root directory'
    'SyncDevDirectoryList.ActionCloneFromList'           = 'Clone {0} repository/repositories from list'
    'SyncDevDirectoryList.ActionCreateListDirectory'     = 'Create directory for repository list file'
    'SyncDevDirectoryList.ActionUpdateListFile'          = 'Update repository list file'
    'SyncDevDirectoryList.ImportFailed'                  = 'Unable to import repository list from {0}: {1}'
    'SyncDevDirectoryList.UnsafeFileEntry'               = 'Repository list entry with unsafe relative path {0} has been skipped.'
    'SyncDevDirectoryList.UnsafeLocalEntry'              = 'Ignoring local repository with unsafe relative path {0}.'
    'SyncDevDirectoryList.RemoteUrlMismatch'             = 'Remote URL mismatch for {0}. Keeping local value {1} over file value {2}.'
    'SyncDevDirectoryList.MissingRemoteUrl'              = 'Repository list entry {0} lacks a RemoteUrl and cannot be cloned.'
    'SyncDevDirectoryList.MissingRootDirectory'          = 'Repository root directory {0} does not exist; skipping clone operations.'
    'SyncDevDirectoryList.InaccessibleRemoteSkipped'     = "Skipping repository '{0}' with inaccessible remote: {1}"
    'SyncDevDirectoryList.Complete'                      = "Synchronization completed. Final repository count: {0}"

    # Publish-DevDirectoryList
    'PublishDevDirectoryList.Start'                      = "Starting Publish-DevDirectoryList with ParameterSet: '{0}', Public: {1}, GistId: '{2}'"
    'PublishDevDirectoryList.AuthenticationDecrypt'      = "Decrypting AccessToken for GitHub API authentication"
    'PublishDevDirectoryList.TokenEmpty'                 = 'The provided access token is empty after conversion.'
    'PublishDevDirectoryList.TokenEmptyError'            = "AccessToken is empty or null"
    'PublishDevDirectoryList.ConfigurationApiUrl'        = "Configured API endpoint: '{0}'"
    'PublishDevDirectoryList.CollectPipelineObject'      = "Collecting repository object from pipeline"
    'PublishDevDirectoryList.NoPipelineData'             = 'No repository metadata was received from the pipeline.'
    'PublishDevDirectoryList.ConvertToJson'              = "Converting {0} pipeline objects to JSON"
    'PublishDevDirectoryList.ReadFile'                   = "Reading repository list from file: '{0}'"
    'PublishDevDirectoryList.FormatDetected'             = "Detected file format: '{0}'"
    'PublishDevDirectoryList.ReadJsonDirect'             = "File is JSON, reading directly"
    'PublishDevDirectoryList.ConvertFormat'              = "Converting {0} to JSON"
    'PublishDevDirectoryList.EmptyContent'               = 'The repository list content is empty. Nothing will be published.'
    'PublishDevDirectoryList.SearchGist'                 = "Searching for existing gist with description 'GitRepositoryList'"
    'PublishDevDirectoryList.GistFound'                  = "Found existing gist with ID: '{0}'"
    'PublishDevDirectoryList.GistNotFound'               = "No existing gist found, will create new"
    'PublishDevDirectoryList.QueryGistFailed'            = 'Failed to query existing gists: {0}'
    'PublishDevDirectoryList.UsingProvidedGistId'        = "Using provided GistId: '{0}'"
    'PublishDevDirectoryList.PublishCanceled'            = "Publish canceled by user (WhatIf/Confirm)"
    'PublishDevDirectoryList.UpdatingGist'               = "Updating existing gist: '{0}'"
    'PublishDevDirectoryList.CreatingGist'               = "Creating new gist"
    'PublishDevDirectoryList.Complete'                   = "Successfully published repository list to gist. GistId: '{0}', URL: '{1}'"
    'PublishDevDirectoryList.CleanupTokens'              = "Cleaning up authentication tokens"
    'PublishDevDirectoryList.ActionPublish'              = 'Publish DevDirManager repository list to GitHub Gist'
    'PublishDevDirectoryList.TargetLabelCreate'          = 'Create gist GitRepositoryList'
    'PublishDevDirectoryList.TargetLabelUpdate'          = 'Update gist {0}'

    # Internal functions - Get-DevDirectoryRemoteUrl
    'GetDevDirectoryRemoteUrl.Start'                     = "Extracting remote URL for '{0}' from repository: '{1}'"
    'GetDevDirectoryRemoteUrl.ConfigPath'                = "Git config path: '{0}'"
    'GetDevDirectoryRemoteUrl.ConfigMissing'             = 'No .git\\config file found at {0}.'
    'GetDevDirectoryRemoteUrl.ConfigNotFound'            = "Git config file not found, returning null"
    'GetDevDirectoryRemoteUrl.ReadingConfig'             = "Reading git config file"
    'GetDevDirectoryRemoteUrl.SearchingSection'          = "Searching for section pattern: '{0}'"
    'GetDevDirectoryRemoteUrl.RemoteUrlFound'            = "Remote URL for '{0}': '{1}'"
    'GetDevDirectoryRemoteUrl.RemoteNotFound'            = "Remote '{0}' not found or has no URL configured"

    # Internal functions - Get-DevDirectoryUserInfo
    'GetDevDirectoryUserInfo.Start'                      = "Extracting user info from repository: '{0}'"
    'GetDevDirectoryUserInfo.ConfigPath'                 = "Git config path: '{0}'"
    'GetDevDirectoryUserInfo.ConfigMissing'              = 'No .git\\config file found at {0}.'
    'GetDevDirectoryUserInfo.ConfigNotFound'             = "Git config file not found, returning null values"
    'GetDevDirectoryUserInfo.ReadingConfig'              = "Reading git config file"
    'GetDevDirectoryUserInfo.SectionFound'               = "Found [user] section in git config"
    'GetDevDirectoryUserInfo.UserNameFound'              = "Found user.name: '{0}'"
    'GetDevDirectoryUserInfo.UserEmailFound'             = "Found user.email: '{0}'"
    'GetDevDirectoryUserInfo.Result'                     = "User info extracted - UserName: '{0}', UserEmail: '{1}'"

    # Internal functions - Test-DevDirectoryRemoteAccessible
    'TestDevDirectoryRemoteAccessible.EmptyUrl'          = "Remote URL is empty, marking as inaccessible"
    'TestDevDirectoryRemoteAccessible.CheckingRemote'    = "Checking remote accessibility for: {0}"
    'TestDevDirectoryRemoteAccessible.Timeout'           = "Remote check timed out after {0} seconds for: {1}"
    'TestDevDirectoryRemoteAccessible.Accessible'        = "Remote is accessible: {0}"
    'TestDevDirectoryRemoteAccessible.NotAccessible'     = "Remote is not accessible (exit code {0}): {1}"
    'TestDevDirectoryRemoteAccessible.Error'             = "Error checking remote accessibility for {0} : {1}"

    # Internal functions - ConvertTo-NormalizedRelativePath
    'ConvertToNormalizedRelativePath.Start'              = "Normalizing relative path: '{0}'"
    'ConvertToNormalizedRelativePath.EmptyPath'          = "Path is empty, whitespace, or '.', returning '.'"
    'ConvertToNormalizedRelativePath.AfterTrim'          = "After trim: '{0}'"
    'ConvertToNormalizedRelativePath.AfterCleanup'       = "After slash cleanup: '{0}'"
    'ConvertToNormalizedRelativePath.BecameEmpty'        = "Path became empty after normalization, returning '.'"
    'ConvertToNormalizedRelativePath.Result'             = "Path normalized: '{0}' -> '{1}'"

    # Internal functions - Add-RepositoryTypeName
    'AddRepositoryTypeName.Start'                        = "Adding DevDirManager.Repository type name to object"
    'AddRepositoryTypeName.Result'                       = "Type name added to object"

    # Generic / Shared
    'RepositoryList.UsingDefaultFormat'                  = "Using configured default format '{0}' for file '{1}'."
    'GetDevDirectoryStatusDate.GitFolderMissing'         = 'No .git folder found at {0}.'
}