import type { AssetResponseDto } from '@api';

export enum BucketPosition {
  Above = 'above',
  Below = 'below',
  Visible = 'visible',
  Unknown = 'unknown',
}

export class AssetBucket {
  /**
   * The DOM height of the bucket in pixel
   * This value is first estimated by the number of asset and later is corrected as the user scroll
   */
  bucketHeight!: number;
  bucketDate!: string;
  assets!: AssetResponseDto[];
  cancelToken!: AbortController;
  position!: BucketPosition;
}

export class AssetGridState {
  /**
   * The total height of the timeline in pixel
   * This value is first estimated by the number of asset and later is corrected as the user scroll
   */
  timelineHeight = 0;

  /**
   * The fixed viewport height in pixel
   */
  viewportHeight = 0;

  /**
   * The fixed viewport width in pixel
   */
  viewportWidth = 0;

  /**
   * List of bucket information
   */
  buckets: AssetBucket[] = [];

  /**
   * Total assets that have been loaded
   */
  assets: AssetResponseDto[] = [];

  /**
   * Total assets that have been loaded along with additional data
   */
  loadedAssets: Record<string, number> = {};

  /**
   * User that owns assets
   */
  userId: string | undefined;
}
