using Butter.Types;
namespace Butter.Dtos.Stats;
///
/// Comprehensive statistics about the MilkyShots instance, gatherable from fast aggregate queries.
///
public class StatsDto {
///
/// Gets or sets the total number of assets (excluding soft-deleted).
///
public int TotalAssets { get; set; }
///
/// Gets or sets the total number of registered users (excluding soft-deleted).
///
public int TotalUsers { get; set; }
///
/// Gets or sets the total number of albums.
///
public int TotalAlbums { get; set; }
///
/// Gets or sets the total number of tags.
///
public int TotalTags { get; set; }
///
/// Gets or sets the total number of people.
///
public int TotalPeople { get; set; }
///
/// Gets or sets the total number of detected faces.
///
public int TotalFaces { get; set; }
///
/// Gets or sets the total number of watched folders.
///
public int TotalFolders { get; set; }
///
/// Gets or sets the asset count broken down by type (Image, Video, Animation, PhotoSphere).
///
public Dictionary AssetsByType { get; set; } = [];
///
/// Gets or sets the total storage used by all assets in bytes.
///
public long TotalStorageBytes { get; set; }
///
/// Gets or sets the storage used broken down by asset type.
///
public Dictionary StorageByType { get; set; } = [];
///
/// Gets or sets the user count broken down by access level.
///
public Dictionary UsersByAccessLevel { get; set; } = [];
///
/// Gets or sets the number of assets added in the last 7 days.
///
public int AssetsAddedLast7Days { get; set; }
///
/// Gets or sets the number of assets added in the last 30 days.
///
public int AssetsAddedLast30Days { get; set; }
///
/// Gets or sets the number of users registered in the last 30 days.
///
public int UsersRegisteredLast30Days { get; set; }
///
/// Gets or sets the number of assets with no associated folder.
///
public int OrphanAssets { get; set; }
///
/// Gets or sets the number of publicly shared assets.
///
public int PublicAssets { get; set; }
///
/// Gets or sets the number of assets with protected visibility (authenticated only).
///
public int ProtectedAssets { get; set; }
///
/// Gets or sets the number of private assets.
///
public int PrivateAssets { get; set; }
///
/// Gets or sets the number of image assets missing resolution metadata.
///
public int AssetsMissingMetadata { get; set; }
///
/// Gets or sets the number of assets missing a generated thumbnail.
///
public int AssetsMissingThumbnail { get; set; }
///
/// Gets or sets the number of assets whose thumbnail was generated at a different size than the current setting.
///
public int AssetsMissingThumbnailStale { get; set; }
///
/// Gets or sets the number of assets missing a generated preview.
///
public int AssetsMissingPreviews { get; set; }
///
/// Gets or sets the number of assets whose preview was generated at a different size than the current setting.
///
public int AssetsMissingPreviewsStale { get; set; }
///
/// Gets or sets the number of assets missing a perceptual hash.
///
public int AssetsMissingPhash { get; set; }
///
/// Gets or sets the number of assets whose processing failed (marked broken).
///
public int TotalBrokenAssets { get; set; }
///
/// Gets or sets the number of assets with no person assigned (no album with a PersonOwner).
///
public int AssetsWithNoPerson { get; set; }
///
/// Gets or sets the number of assets with no album assigned.
///
public int AssetsWithNoAlbum { get; set; }
///
/// Gets or sets the number of albums without a cover image.
///
public int AlbumsMissingCover { get; set; }
///
/// Gets or sets the number of people/cosplayers without a profile picture.
///
public int CosplayersMissingProfile { get; set; }
///
/// Gets or sets the top tags by asset count.
///
public List TopTags { get; set; } = [];
///
/// Gets or sets the resolution distribution of assets.
///
public List ResolutionDistribution { get; set; } = [];
///
/// Gets or sets the file format breakdown by MIME type.
///
public List FileFormatBreakdown { get; set; } = [];
///
/// Gets or sets the monthly new-asset and new-user counts for the last 12 months.
///
public List MonthlyGrowth { get; set; } = [];
}