// Copyright (c) 2026 Duplicati Inc. All rights reserved.

using Duplicati.Library.Localization.Short;

namespace Duplicati.Proprietary.DiskImage.General;

/// <summary>
/// Localization strings for the DiskImage module.
/// </summary>
internal static class Strings
{
    /// <summary>
    /// Display name for the source provider.
    /// </summary>
    public static string ProviderDisplayName => LC.L("Disk Image Provider");

    /// <summary>
    /// Description for the source provider.
    /// </summary>
    public static string ProviderDescription => LC.L(
        "Expose disks, partitions, and filesystems as a virtual folder structure.");

    /// <summary>
    /// Display name for the restore provider.
    /// </summary>
    public static string RestoreProviderDisplayName => LC.L("Disk Image Restore Provider");

    /// <summary>
    /// Description for the restore provider.
    /// </summary>
    public static string RestoreProviderDescription => LC.L(
        "Restore disk images to physical disks, partitions, and filesystems.");

    /// <summary>
    /// Short description for the auto unmount option.
    /// </summary>
    public static string DiskRestoreAutoUnmountShort => LC.L("Auto unmount target disk.");

    /// <summary>
    /// Long description for the auto unmount option.
    /// </summary>
    public static string DiskRestoreAutoUnmountLong => LC.L("If set, the target disk will automatically unmount all volumes, pull the disk offline, and clear the readonly attributes before restore operations. This is a requirement for restore on Windows.");

    /// <summary>
    /// Short description for the skip partition table option.
    /// </summary>
    public static string DiskRestoreSkipPartitionTableShort => LC.L("Skip partition table restore.");

    /// <summary>
    /// Long description for the skip partition table option.
    /// </summary>
    public static string DiskRestoreSkipPartitionTableLong => LC.L("If set, the partition table (MBR/GPT) will not be restored, only the data within partitions.");

    /// <summary>
    /// Short description for the validate size option.
    /// </summary>
    public static string DiskRestoreValidateSizeShort => LC.L("Validate target size.");

    /// <summary>
    /// Long description for the validate size option.
    /// </summary>
    public static string DiskRestoreValidateSizeLong => LC.L("If set, the target disk size will be validated against the source size before restoring.");

    /// <summary>
    /// Error message for when platform is not supported.
    /// </summary>
    public static string PlatformNotSupported => LC.L("Disk image operations are only supported on Windows, macOS, and Linux.");

    /// <summary>
    /// Error message for when restore target device is not found.
    /// </summary>
    public static string RestoreTargetNotFound => LC.L("Restore target device not found: {0}");

    /// <summary>
    /// Error message for when restore target is too small.
    /// </summary>
    public static string RestoreTargetTooSmall => LC.L("Restore target device is too small. Target: {0} bytes, Source: {1} bytes.");

    /// <summary>
    /// Error message for when overwrite option is not set.
    /// </summary>
    public static string RestoreOverwriteNotSet => LC.L("The overwrite option must be set to restore to a disk image target. Use --overwrite to enable.");

    /// <summary>
    /// Error message for when device cannot be opened for writing.
    /// </summary>
    public static string RestoreDeviceNotWriteable => LC.L("Failed to open device for write access: {0}");

    /// <summary>
    /// Error message for when restore path is invalid.
    /// </summary>
    public static string RestoreInvalidPath => LC.L("Invalid restore path: {0}");

    /// <summary>
    /// Display name for the web module.
    /// </summary>
    public static string WebModuleDisplayName => LC.L("Disk Image Web Module");

    /// <summary>
    /// Description for the web module.
    /// </summary>
    public static string WebModuleDescription => LC.L("Provides web-based access to disk image operations.");

    /// <summary>
    /// Short description for the web module operation option.
    /// </summary>
    public static string WebModuleOperationShort => LC.L("The operation to perform.");

    /// <summary>
    /// Long description for the web module operation option.
    /// </summary>
    public static string WebModuleOperationLong => LC.L("The operation to perform in the web module.");

    /// <summary>
    /// Short description for the web module URL option.
    /// </summary>
    public static string WebModuleURLShort => LC.L("The URL to use.");

    /// <summary>
    /// Long description for the web module URL option.
    /// </summary>
    public static string WebModuleURLLong => LC.L("The URL to use for the web module operation.");

    /// <summary>
    /// Short description for the web module path option.
    /// </summary>
    public static string WebModulePathShort => LC.L("The path to use.");

    /// <summary>
    /// Long description for the web module path option.
    /// </summary>
    public static string WebModulePathLong => LC.L("The path to use for the web module operation.");

    /// <summary>
    /// Short description for the filesystem unknown option.
    /// </summary>
    public static string DiskImageFilesystemUnknownShort => LC.L("Treat filesystem as unknown.");

    /// <summary>
    /// Long description for the filesystem unknown option.
    /// </summary>
    public static string DiskImageFilesystemUnknownLong => LC.L("If set, the filesystem on partitions will be treated as unknown, rather than trying to detect it. This forces raw block-based backup instead of filesystem-aware backup.");
}
