// Copyright 2016-present the Material Components for iOS authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#import <UIKit/UIKit.h>

/** Types of cell ordinal positions available within a collectionView. */
typedef NS_OPTIONS(NSUInteger, MDCCollectionViewOrdinalPosition) {
  /** Cell visually has top edge within section. */
  MDCCollectionViewOrdinalPositionVerticalTop = 1 << 0,

  /** Cell visually has no top/bottom edges within section. */
  MDCCollectionViewOrdinalPositionVerticalCenter = 1 << 1,

  /** Cell visually has bottom edge within section. */
  MDCCollectionViewOrdinalPositionVerticalBottom = 1 << 2,

  /**
   Cell visually has both bottom/top edges within section. Typically for a single or inlaid cell.
   */
  MDCCollectionViewOrdinalPositionVerticalTopBottom =
      (MDCCollectionViewOrdinalPositionVerticalTop |
       MDCCollectionViewOrdinalPositionVerticalBottom),

  /** Cell visually has left edge within section. */
  MDCCollectionViewOrdinalPositionHorizontalLeft = 1 << 10,

  /** Cell visually has no left/right edges within section. */
  MDCCollectionViewOrdinalPositionHorizontalCenter = 1 << 11,

  /** Cell visually has right edge within section. */
  MDCCollectionViewOrdinalPositionHorizontalRight = 1 << 12
};

/**
 The MDCCollectionViewLayoutAttributes class allows passing layout attributes to the cells and
 supplementary views.
 */
@interface MDCCollectionViewLayoutAttributes : UICollectionViewLayoutAttributes <NSCopying>

#pragma mark - Cell Styling

/** A boolean value indicating whether the collectionView is being edited. Defaults to NO. */
@property(nonatomic, getter=isEditing) BOOL editing;

/**
 A boolean value indicating whether the collectionView cell should be displayed with reorder
 state mask. Defaults to NO.
 */
@property(nonatomic, assign) BOOL shouldShowReorderStateMask;

/**
 A boolean value indicating whether the collectionView cell should be displayed with selector
 state mask. Defaults to NO.
 */
@property(nonatomic, assign) BOOL shouldShowSelectorStateMask;

/**
 A Boolean value indicating whether the collection view cell should allow the grid background
 decoration view to be drawn at the specified index.
 */
@property(nonatomic, assign) BOOL shouldShowGridBackground;

/** The image for use as the cells background image. */
@property(nonatomic, strong, nullable) UIImage *backgroundImage;

/** The background image view edge insets. */
@property(nonatomic) UIEdgeInsets backgroundImageViewInsets;

/**
 A boolean value indicating whether the collectionView cell style is set to
 MDCCollectionViewCellLayoutTypeGrid.
 */
@property(nonatomic, assign) BOOL isGridLayout;

/** The ordinal position within the collectionView section. */
@property(nonatomic, assign) MDCCollectionViewOrdinalPosition sectionOrdinalPosition;

#pragma mark - Cell Separator

/** Separator color. Defaults to #E0E0E0. */
@property(nonatomic, strong, nullable) UIColor *separatorColor;

/** Separator inset. Defaults to UIEdgeInsetsZero. */
@property(nonatomic) UIEdgeInsets separatorInset;

/** Separator line height. Defaults to 1 */
@property(nonatomic) CGFloat separatorLineHeight;

/** Whether to hide the cell separators. Defaults to NO. */
@property(nonatomic) BOOL shouldHideSeparators;

#pragma mark - Cell Appearance Animation

/** Whether cells will animation on appearance. */
@property(nonatomic, assign) BOOL willAnimateCellsOnAppearance;

/**
 The cell appearance animation duration. Defaults to MDCCollectionViewAnimatedAppearanceDuration.
 */
@property(nonatomic, assign) NSTimeInterval animateCellsOnAppearanceDuration;

/** The cell delay used to stagger fade-in during appearance animation. Defaults to 0. */
@property(nonatomic, assign) NSTimeInterval animateCellsOnAppearanceDelay;

@end
